SEO外包平台,我们为您提供专业的企业网站SEO整站优化外包服务 SEO设置

SEO外包平台

专注于企业网站SEO整站优化外包服务

集中式日志系统ELK协议栈_Nginx日志分析

作者:jcmp      发布时间:2021-05-19      浏览量:0
环境原则介绍和安装elk可以参考我以前的

环境

原则

介绍和安装elk

可以参考我以前的博客:集中式日志系统elk协议栈_Introduction和Installation。

安装filebat

除了elk系统之外,我们还需要filebat来读取文件的内容并将其发送到elk系统。(filebat实际上与elk是同一家公司,属于Beats类别。)<;节点名>;),模板名将采用不同的格式。

卷曲-L-O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.1-x86_64.rpmsudo rpm-vi filebeat-6.1.1-x86_64.rpmrmrmfilebeat-6.1.1-x86_64.rpm-f.

构造数据源

为了演示日志分析,您需要动态构造访问数据,您可以使用我编写的一个简单的Python脚本来保存文件名INSERT_FILY_nginx_log.py。Python脚本中默认的Nginx日志路径是/var/log/nginx/access。日志,如果日志文件不在此路径中,则可以根据实际情况对其进行修改。

#INSERT_FIN_INGINX_nginx_log.pyimport Datetimeimport随机导入时间def append_log_line_to_nginx(Line_Count):Curr_Time=datetime.datetime.now().strftime(‘%d/%b/%Y:%H:%M:%S’)IP_List=[‘116.199.2.208’,‘116.199.2.196’,‘116.199.115.79’,‘101.53.101.172’,‘101.53.101.172’,‘47.94.23.128’,‘222,73.77.49.85’,‘182,107.12.28’,‘122,228,179.178’,‘182,1229,254’,‘18,128.18,253’,‘106,145.3’,‘13,140.25’,4‘122,228,158’,‘117,90,225,’121,40,135,120,77.152‘,’59.51,121.121.7‘,’1223,177.20,80‘,’121,101.101.25,25724.224.24.25.24.24.24.24.2525,‘‘59.51,121.121,191’,‘11,51.12,20,80’,‘121,101,12,25,224’,‘121,12,152’,‘121,12,152’,‘121,121,121.20,80’,‘121,101,155’,‘121,40,152’,‘121,77,12,152’。‘58.56.149.158’,‘125,67.75.53’,‘233,241,116,131’,‘111,155.116,226’,‘183,1483.39’,‘11,14,84.73’,‘111,44.84.73’,‘121,232,144.226’,‘11,232,144.226’,‘11,15,14,226’,‘183,14,84.73’,‘11,44.84.73’,‘123,241,241.144’。131‘,’11,15,13,226‘.135’,]Request_List=[‘get/任务/’,‘POST/TATS/’PUT/TATS/26925b7335f08624249f27b4249f27b4167a/‘,’GET/TATS/26925b7335f09824469f27b4e3167a/‘,’GET/tasks/26925b7335f0869824469f27b4e3167b/upload/‘,’GET/tasks/26925b7335f0869824469f27b4e3167b/download/‘,]agent_List=[’Mozilla/4.0(兼容;MSIE;WindowsNT 10.0;WW 64;‘Tridin/7.0;.NET4.0C;.NET4.0E’,‘Mozilla/5.0(WindowsNT 10.0;Win 64;x64)AppleWebKit/537.36’(KHTML,类似壁虎)Chrome/52.0.2743.116 Safari/537.36 EDGE/15.15063,‘PostmanRuntime/6.4.1’,‘Mozilla/5.0(WindowsNT 10.0;WW 64)AppleWebKit/537.36‘(KHTML,类似壁虎)Chrome/63.0.3239.132 Safari/537.36,]Response_List=[’200‘,’401‘,’403‘,’404‘,’500‘,]打开(’/var/log/nginx/access.log‘,A‘)f:for_in范围(行_count):f.write(’%s-[%s+0800]“%s HTTP/1.1”“%s 25”-“%s”-“%s”-“\n‘%”(随机)。(选择(Ip_List),Curr_time,随机选择(请求_列表),随机选择(响应_列表),随机选择(Agent_List))(if__name__=‘__main_’:打印(‘运行.’)而True:append_log_line_to_nginx(随机的,随机的(1,100)时间),睡眠(随机的,随机的(1,5))。

配置文件

新配置文件

vi/etc/filebat/nginx_log_reader.yml。

配置文件内容和指令

filebeat.spectors:-type:log path:-/var/log/nginx/access.log#nginx访问日志路径字段:#Add附加字段log_type:nginx#附加字段到field_out_root:true#此值默认为false的附加字段,它将在根键“field”下添加上面的值,其中值设置为true,这表示附加字段直接放置在根键中,输出。Logstash:#输出到IP和主机端口:[“localhost:5044”]#Logstash中的Logstash。

启动之前编写的Python脚本,不断地将日志写入Nginx日志文件。

python插入_false_nginx_log.py。

打开文件节拍

cd/usr/share/filebat/filebat-e-c nginx_log_reader.yml-d“发布”

文件节拍将尝试连接到Logstash的端口5044,但没有启用Beats插件,因此将显示以下错误消息。

2018/01/27 09:19:01.645646输出。go:74:错误连接:拨号tcp 127.0.0.1:5044:getsockopt:连接被拒绝。

配置Logstash

输入Logstash目录

cd/usr/share/logstash

创建配置文件

vi nginx_log。Yml

配置文件如下--配置文件稍后将详细描述

输入{B拍{端口=>“5044”}筛选器{if[log_type]=“nginx”{grok{match=>{“message”=>“%{httpd_COMBINEDLOG}”}Remove_field=>[Message]]}Geoip{source=>“clientip”(用translate)}date{locale=>‘en-US’match=>[“timestamp”)“odd/mm/本世纪翻译:hh:mm:mm)。[mm.ssz“]目标区=>”亚洲/Shanghai“remove_field=>[”timestamp“]}}}output{stdout{codec=>rubydebug}elasticsearch{hosts=>(”localhost:“本地主机:9200”]索引=>“logstash-nginx_log”}

LogstashConfiguration文件描述

LogstashConfiguration文件基本结构

LogstashDivivied成三个partsinputfilterOutput,每个部分提供了大量插件,三者之间的关系如下:您可以根据需要跳过它:

配置文件也被划分为三个部分,其中可以省略该部分。

输入{.}过滤器{.}输出{.}

配置文件语法

我们可以在过滤器和输出中使用一些语法。

使用变量

表示顶级字段时,可以使用

表示嵌套字段,您可以使用

[顶级字段][嵌套字段]

使用条件语句

您可以使用if/Else if/Else条件语句,您也可以嵌套

如果表达式{.}

使用系统环境变量

使用环境变量

使用默认值

${var:Default_value}

如果环境变量未定义,使用系统环境变量

使用默认值

${var:default_value}

如果系统环境变量

您需要重新启动logstash才能使用新的环境变量。

输入

官方输入插件文档导航参见正式文档-Logstash输入插件。

我们在这里使用的插件是拍频,通常只需要设置端口条目来指定传输的端口号。

输入{拍{port=>“5044”}过滤器{.}输出{.}

筛选器

正式解析插件导航参见:正式文档-Logstash解析插件。

这里我们使用三个解析插件:Grok、Geoip和Date。

输入{.}筛选器{if[log_type]==“nginx”{grok{Match=>{“Message”=>“%{httpd_COMBINEDLOG}”}Remove_field=>[“Message”,}“dd/mmm/yyy:hh:mm:ssz”目标=>“@timeSTAMP”时区=>“亚洲/上海”Remove_field=>[“时间戳”]}输出{.}

解析插件之Grok

grok{Match=>{“Message”=>%{httpd_COMBINEDLOG}Remove_field=>[“Message”,

nginx的日志结构是这样的

180.118.128.196-[18/Jan/2018:01:20:31+0800]“PUT/Work/HTTP/1.1”401 25-“Mozilla/4.0(兼容;MSIE7.0;Windows NT 10.0;WOW 64;TRIDENT/7.0;净4.0C;NET 4。

您可以看到这是一串字符串,我们需要输出到Elasticsearch的数据结构是JSON,Grok解析插件可以将这堆字符串解析为JSON格式。

Grok解析的原理是通过解析模式(基本上是正则表达式)从字符串中提取字符,然后为变量赋值以构造JSON。

中内置的

Grok中的解析模式语法为%{语法:Semantic},除了

之外,还可以添加要指定的数据类型,例如%{number:num:int},它目前只支持int或Float的指定数据格式,如果不支持,则默认匹配到str。

Nginx的日志格式可以直接使用官方提供的解析模式httpd_COMBINEDLOG。

180.118.128.196-[18/Jan/2018:01:20:31+0800]“PUT/Worker/HTTP/1.1”401“401”-“Mozilla/4.0(兼容;MSIE 7.0;Windows NT 10.0;WOW 64;Tridin/7.0;.NET4.0C;NET4.0E)“-”

httpd_Commonlog%{IPORHOST:clientip}%{HTTPDUSER:ident}%{HTTPDUSER:Auth}\[%{HTTPDATE:时间戳}]“(?%{word:谓词}%{NOTSpace:Request})(?Http/%{number:httpversion})?%{data:rawrequest:Referrer}%{qs:agent}

Geoip{source=>“clientip”}

GeoIP解析插件可以基于MaxMindGeoLite 2数据库将IP地址解析为地理位置。下图

显示Kibana中GeoIP解析的IP地址(稍后将更详细地描述)。

解析插件日期

日期{locale=>“en-US”Match=>[“时间戳”,“dd/mmm/yyy:hh:mm:ss Z”]目标值=>“@timeSTAMP”时区=>“Asia/Shanghai”Remove_field=>[“时间戳”]}}

locale

字符串类型,区域设置为en-US

匹配

列表类型,若要解析到字段名和格式的日期,请执行以下操作。除了以下

格式之外,还可以直接使用Joda时间库类处理。该格式的定义如下:

目标

字符串类型。如果您想解析字段名,默认值是@Target

时区

字符串类型,时区,如Asia/Shanghai

tag_on_Failure

列表类型,如果解析失败,则指定添加到标记字段的值,默认情况下,[“_p>

通常不会发生更改。

输出

官方输出插件-在文档导航中参见正式文档-Logstash输出插件-in。

这里我们使用两个输出插件,stout和ElasticSearch。

输入{.}filter{.}输出{stdout{codec=>rubybug}ElasticSearch{host=>[“localhost:9200”索引=>“logstash-nginx_log”}}

stdout{codec=>rubybug}可以将所有输出信息打印到终端。ElasticSearch是将信息输出到Elasticearch,通常只需要设置两个项,即主机和索引。

启动Logstash

cd/usr/share/logstashbin/logstash-f nginx_log.yml-config.reload.Automatic。

-config.reload.Automatic意味着在修改配置文档时自动重新启动。

启动时,将报告以下错误:

[≤]2018-01-29 10≤29≤39.982[[Main]-管线管理器]ElasticSearch-安装模板失败。{:Message=>“模板文件‘无法找到!”,:class=>“argumentError”,:backtrace=>[“/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.0.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:31:in’read_Template_file‘,“/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.0.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:17:in‘GET_Template’,”/usr/share/logstash/供应商/bundle/jruby/2.3。0/gems/logstash-output-elasticsearch-9.0.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:7:in‘install_Template’“,”/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.0.2-java/lib/logstash/outputs/elasticsearch/common.rb:57:in‘install_Template’“,“/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.0.2-java/lib/logstash/outputs/elasticsearch/common.rb:26:in‘寄存器’,”/usr/share/logstash/logstash-core/lib/logstash/output_delegator_strategies/shared.rb:9:in‘寄存器’,“/usr/share/logstash/logstash-core/lib/logstash/output_delegator.rb:43:in‘寄存器’,“/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:343:in‘”/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:343:in_plugin’,“/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:354:in‘Block in寄存器_plugins’”,“org/jruby/RubyArray.java:1734:在‘each’中,”/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:354:in‘“/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:354:in_plugins’”,“/usr/share/logstash/logstash-core/lib/logstash/pipeline.RB:743:在‘可能_Setup_out_plugins’、“/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:364:in‘Start_Worker’、”/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:288:in‘Run’、“/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:248:in‘Block in start’}}

这是因为Elasticearch未启动中,无法找到相应的模板,只需稍后启动Elasticearch。

配置弹力搜索

根据安装步骤切换到非根帐户,直接启动

cd/usr/share/弹性搜索bin/ElasticSearch。

将Kibana

在修改主机后配置为0.0.0.0,根据安装步骤直接启动。

cd/usr/share/kibanabin/kibanabin/kibanaba

创建一个索引

查看“发现”页

提供更直观的视图

使仪表板

扩展

博客更新地址