将nginx日志通过filebeat收集后传入logstash,经过logstash处理后写入elasticsearch。filebeat只负责收集工作,logstash完成日志的格式化,数据的替换,拆分 ,以及将日志写入elasticsearch后的索引的创建。
1、配置nginx日志格式
log_format main '$remote_addr $http_x_forwarded_for [$time_local] $server_name $request ' '$status $body_bytes_sent $http_referer ' '"$http_user_agent" ' '"$connection" ' '"$http_cookie" ' '$request_time ' '$upstream_response_time';
2、安装配置filebeat,启用nginx module
tar -zxvf filebeat-6.2.4-linux-x86_64.tar.gz -c /usr/local cd /usr/local;ln -s filebeat-6.2.4-linux-x86_64 filebeat cd /usr/local/filebeat
启用nginx模块
./filebeat modules enable nginx
查看模块
./filebeat modules list
创建配置文件
vim /usr/local/filebeat/blog_module_logstash.yml filebeat.modules: - module: nginx access: enabled: true var.paths: ["/home/weblog/blog.cnfol.com_access.log"] #error: # enabled: true # var.paths: ["/home/weblogerr/blog.cnfol.com_error.log"] output.logstash: hosts: ["192.168.15.91:5044"]
启动filebeat
./filebeat -c blog_module_logstash.yml -e
3、配置logstash
tar -zxvf logstash-6.2.4.tar.gz /usr/local cd /usr/local;ln -s logstash-6.2.4 logstash 创建一个nginx日志的pipline文件 cd /usr/local/logstash
logstash内置的模板目录
vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns
编辑 grok-patterns 添加一个支持多ip的正则
forword (?:%{ipv4}[,]?[ ]?)+|%{word}
官方grok
#
创建logstash pipline配置文件
#input { # stdin {} #} # 从filebeat接受数据 input { beats { port => 5044 host => "0.0.0.0" } } filter { # 添加一个调试的开关 mutate{add_field => {"[@metadata][debug]"=>true}} grok { # 过滤nginx日志 #match => { "message" => "%{nginxaccess_test2}" } #match => { "message" => '%{iporhost:clientip} # (?<http_x_forwarded_for>[^\#]*) # \[%{httpdate:[@metadata][webtime]}\] # %{notspace:hostname} # %{word:verb} %{uripathparam:request} http/%{number:httpversion} # %{number:response} # (?:%{number:bytes}|-) # (?:"(?:%{notspace:referrer}|-)"|%{notspace:referrer}|-) # (?:"(?<http_user_agent>[^#]*)") # (?:"(?:%{number:connection}|-)"|%{number:connection}|-) # (?:"(?<cookies>[^#]*)") # %{number:request_time:float} # (?:%{number:upstream_response_time:float}|-)' } #match => { "message" => '(?:%{iporhost:clientip}|-) (?:%{two_ip:http_x_forwarded_for}|%{ipv4:http_x_forwarded_for}|-) \[%{httpdate:[@metadata][webtime]}\] (?:%{hostname:hostname}|-) %{word:method} %{uripathparam:request} http/%{number:httpversion} %{number:response} (?:%{number:bytes}|-) (?:"(?:%{notspace:referrer}|-)"|%{notspace:referrer}|-) %{qs:agent} (?:"(?:%{number:connection}|-)"|%{number:connection}|-) (?:"(?<cookies>[^#]*)") %{number:request_time:float} (?:%{number:upstream_response_time:float}|-)' } match => { "message" => '(?:%{iporhost:clientip}|-) %{forword:http_x_forwarded_for} \[%{httpdate:[@metadata][webtime]}\] (?:%{hostname:hostname}|-) %{word:method} %{uripathparam:request} http/%{number:httpversion} %{number:response} (?:%{number:bytes}|-) (?:"(?:%{notspace:referrer}|-)"|%{notspace:referrer}|-) %{qs:agent} (?:"(?:%{number:connection}|-)"|%{number:connection}|-) %{qs:cookie} %{number:request_time:float} (?:%{number:upstream_response_time:float}|-)' } } # 将默认的@timestamp(beats收集日志的时间)的值赋值给新字段@read_tiimestamp ruby { #code => "event.set('@read_timestamp',event.get('@timestamp'))" #将时区改为东8区 code => "event.set('@read_timestamp',event.get('@timestamp').time.localtime + 8*60*60)" } # 将nginx的日志记录时间格式化 # 格式化时间 20/may/2015:21:05:56 +0000 date { locale => "en" match => ["[@metadata][webtime]","dd/mmm/yyyy:hh:mm:ss z"] } # 将bytes字段由字符串转换为数字 mutate { convert => {"bytes" => "integer"} } # 将cookie字段解析成一个json #mutate { # gsub => ["cookies",'\;',','] #} # 如果有使用到cdn加速http_x_forwarded_for会有多个ip,第一个ip是用户真实ip if[http_x_forwarded_for] =~ ", "{ ruby { code => 'event.set("http_x_forwarded_for", event.get("http_x_forwarded_for").split(",")[0])' } } # 解析ip,获得ip的地理位置 geoip { source => "http_x_forwarded_for" # # 只获取ip的经纬度、国家、城市、时区 fields => ["location","country_name","city_name","region_name"] } # 将agent字段解析,获得浏览器、系统版本等具体信息 useragent { source => "agent" target => "useragent" } #指定要删除的数据 #mutate{remove_field=>["message"]} # 根据日志名设置索引名的前缀 ruby { code => 'event.set("@[metadata][index_pre]",event.get("source").split("/")[-1])' } # 将@timestamp 格式化为2019.04.23 ruby { code => 'event.set("@[metadata][index_day]",event.get("@timestamp").time.localtime.strftime("%y.%m.%d"))' } # 设置输出的默认索引名 mutate { add_field => { #"[@metadata][index]" => "%{@[metadata][index_pre]}_%{+yyyy.mm.dd}" "[@metadata][index]" => "%{@[metadata][index_pre]}_%{@[metadata][index_day]}" } } # 将cookies字段解析成json # mutate { # gsub => [ # "cookies", ";", ",", # "cookies", "=", ":" # ] # #split => {"cookies" => ","} # } # json_encode { # source => "cookies" # target => "cookies_json" # } # mutate { # gsub => [ # "cookies_json", ',', '","', # "cookies_json", ':', '":"' # ] # } # json { # source => "cookies_json" # target => "cookies2" # } # 如果grok解析存在错误,将错误独立写入一个索引 if "_grokparsefailure" in [tags] { #if "_dateparsefailure" in [tags] { mutate { replace => { #"[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{+yyyy.mm.dd}" "[@metadata][index]" => "%{@[metadata][index_pre]}_failure_%{@[metadata][index_day]}" } } # 如果不存在错误就删除message }else{ mutate{remove_field=>["message"]} } } output { if [@metadata][debug]{ # 输出到rubydebuyg并输出metadata stdout{codec => rubydebug{metadata => true}} }else{ # 将输出内容转换成 "." stdout{codec => dots} # 将输出到指定的es elasticsearch { hosts => ["192.168.15.160:9200"] index => "%{[@metadata][index]}" document_type => "doc" } } }
启动logstash
nohup bin/logstash -f test_pipline2.conf &
以上是nginx日志如何导入elasticsearch的详细内容。更多信息请关注PHP中文网其他相关文章!

小米与蔚来达成战略合作,共建充电网络!两大新能源汽车巨头强强联手,为用户带来更便捷的充电体验,并推动行业资源整合。据官方消息,超过14000个蔚来充电桩将接入小米充电地图。用户可实时查看充电桩状态,包括可用数量和功率等信息,有效提升充电效率。此举是蔚来“加电县县通”计划的重要一步,旨在到明年6月30日前实现全国县级行政区充电桩全覆盖。蔚来先进的充电技术将满足大部分新能源车主的需求。对小米而言,这弥补了其充电网络布局的不足,提升了其在新能源汽车市场的竞争力。双方合作实现资源共享,互利共赢。同时,蔚

谷歌发布Gemini2,OpenAI紧随其后推出ChatGPTVision功能!谷歌昨晚发布了其强大的Gemini2模型,并宣布提供免费服务。此举似乎促使OpenAI迅速公布了期待已久的ChatGPTVision功能,为用户带来更丰富的多模态体验。ChatGPTVision功能不再局限于文本交互,用户现在可以进行视频通话、屏幕共享,甚至与圣诞老人实时互动,带来全新的多模态交互体验。OpenAI的发布会简洁明了,仅持续了11分钟。

苹果追求“一块完整玻璃”的iPhone终极设计:挑战与展望苹果公司前首席设计师乔尼·艾维曾设想一款完全无边框的iPhone,如同“一块完整的玻璃”。这一目标曾被寄望于iPhone18实现,但目前看来难度很大。苹果的目标是让显示屏覆盖整个正面,并无缝延伸至手机侧面,创造出浑然一体的视觉效果。尽管艾维已离职,但苹果仍在努力实现这一“一块玻璃”的构想,力求正面看不到任何边框,只有屏幕。iPhoneX是苹果迈向这一目标的重要一步,但后续进展缓慢。虽然边框不断缩小,但依然清晰可见。彻底消除边框需要采用曲面

苹果iPhone17或将迎来重大升级,以应对国内华为、小米等强劲竞争对手的冲击。据数码博主@数码闲聊站爆料,iPhone17标准版有望首次搭载高刷新率屏幕,显着提升用户体验。此举标志着苹果历经五年,终于将高刷新率技术下放至标准版机型。目前,iPhone16作为6000元价位段唯一一款配备60Hz屏幕的旗舰手机,显得有些落后。虽然iPhone17标准版将拥有高刷新率屏幕,但与Pro版相比仍存在差异,例如边框设计仍未达到Pro版的超窄边框效果。更值得关注的是,iPhone17Pro系列将采用全新、更

2024上海Major:Spirit战队夺冠,AGON爱攻见证荣耀时刻!历时近一个月,备受瞩目的2024反恐精英世界锦标赛(2024上海Major)于12月15日落下帷幕。最终,Spirit战队以2:1的比分战胜FaZe战队,问鼎冠军,创造了属于他们的传奇!作为官方合作伙伴,AGON爱攻为决赛战队提供了赛事显示器,全程见证了这场巅峰对决的精彩瞬间。巅峰对决,激情无限决赛现场,气氛火爆!巨型LED屏幕实时直播比赛,观众热情高涨,为各自支持的战队呐喊助威。选手们精彩的操作和关键时刻的精准击杀,将比赛

知名硬件爆料网站VideoCardz近日在索泰官网发现NVIDIA即将在CES2025展会上发布的GeForceRTX50系列显卡信息,部分印证了之前的传闻。GeForceRTX50系列产品线旗舰型号GeForceRTX5090预计将配备高达32GB的GDDR7显存,这是RTX40系列所不具备的规格。此外,还将推出中国大陆地区专属型号GeForceRTX5090D。VideoCardz还发现了RTX5080、RTX5070Ti和RTX5070等型号,这些显卡预计将与RTX5090一同发布,但上市

Steam2024年12月硬件调查报告新鲜出炉!这份来自全球最大游戏平台的数据,再次引发了玩家对游戏显卡配置的关注。报告显示,RTX3060以5.88%的占比继续领跑游戏显卡市场,较上月增长0.29%。值得一提的是,RTX3060已连续两年蝉联12月显卡占有率冠军宝座。以下是2024年12月Steam硬件调查报告中其他主要硬件配置的占比数据:操作系统:Windows1164位:54.96%(增长6.16%)系统内存:16GB:45.07%(减少0.86%)CPU速度:2.3GHz到2.69GHz

埃隆·马斯克近期在社交平台上对人工智能(AI)的未来发展做出了大胆预测。他指出,AI技术正以前所未有的速度发展,而人类对此的认知却相对滞后。马斯克预测,到2025年底,AI的智力水平将超过任何单个的人类;2027年至2028年间,AI的整体智力将超越全人类。马斯克进一步强调,AI超越人类智力的趋势将日益显着,并预计到2030年,这一可能性将接近100%。这预示着AI全面超越人类智力的一个新时代的到来。 ChatGPT的出现引发了全球对人工智能领域的投资热潮。 CBInsights的数据显示,去年风险


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。