bin8与bin404哪个好,bin28和bin128哪个好喝

首页 > 经验 > 作者:YD1662022-10-27 10:29:57

bin8与bin404哪个好,bin28和bin128哪个好喝(9)

方法如下:

在kibana节点上写一个脚本,然后设置定时任务执行kibana中索引与elasticsearch的关联 vim /usr/local/scripts/kibana_create_index.sh #!/bin/bash today=`date %Y-%m-%d` index_name="nginx-log-${today}.log" curl -X POST -H "kbn-xsrf:reporting" -H "Content-Type: application/json" -d '{"attributes":{"title":"'$log_name'"}}' 'http://172.16.211.143:5601/api/saved_objects/index-pattern' 这里遇到一个问题,json中调用变量的问题,一直调用不到,后来各种查询原来是格式不对 json数据里变量要用''括起来 <font color=gray size=72>color=gray</font>

json数据里变量要用''括起来https://www.cnblogs.com/landhu/p/7048255.html

ELK 索引生命周期管理

问题解决

Kibana server is not ready yet出现的原因

第一点:KB、ES版本不一致(网上大部分都是这么说的)

解决方法:把KB和ES版本调整为统一版本

第二点:kibana.yml中配置有问题(通过查看日志,发现了Error: No Living connections的问题)

解决方法:将配置文件kibana.yml中的elasticsearch.url改为正确的链接,默认为: http://elasticsearch:9200

改为http://自己的IP地址:9200

第三点:浏览器没有缓过来

解决方法:刷新几次浏览器。

终极解决方法:在elasticsearch中删除kibana的相关索引,只是再打开kibana看不到其他了之前创建的图形什么的了

kibana可以做哪些分析

分析的必要性:顶级

更多图形看这里https://www.cnblogs.com/hanyifeng/p/5860731.html

比较牛逼一点的教程看这里https://www.bilibili.com/video/BV1TE411A77i?p=6

三、logstash

logstash和filebeat的对比

Filebeat是收集日志的另外一种方式,二者区别在于以下

Filebeat用于日志收集和传输,相比Logstash更加轻量级和易部署,对系统资源开销更小,日志流架构的话,Filebeat适合部署在收集的最前端,Logstash相比Filebeat功能更强,可以在Filebeat收集之后,由Logstash进一步做日志的解析,至于kafka也可以考虑添加,然后收集的数据都存放在elasticsearch中。

  1. logstash和filebeat都是可以作为日志采集的工具,目前日志采集的工具有很多种,如fluentd, flume, logstash,betas等等。甚至最后我决定用filebeat作为日志采集端工具的时候,还有人问我为什么不用flume,logstash等采集工具。
  2. logstash出现时间要比filebeat早许多,随着时间发展,logstash不仅仅是一个日志采集工具,它也是可以作为一个日志搜集工具,有丰富的input|filter|output插件可以使用。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。上送到elasticsearch。logstash详细信息可前往https://www.elastic.co/
  3. logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高,网上有一篇关于其性能测试的报告。之前自己也做过和filebeat的测试对比。在采集日志方面,对CPU,内存上都要比前者高很多。LogStash::Inputs::Syslog 性能测试与优化
  4. filebeat也是elastic.公司开发的,其官方的说法是为了替代logstash-forward。采用go语言开发。代码开源。elastic/beats filebeat是beats的一个文件采集工具,目前其官方基于libbeats平台开发的还有Packetbeat, Metricbeat, Winlogbeat。filebeat性能非常好,部署简单。是一个非常理想的文件采集工具。我自己采集工具也是基于beats源码进行的二次开发。

https://blog.csdn.net/m0_38120325/article/details/79072921

自动创建elasticsearch的索引

在logstash客户端的配置文件中会有这么一个配置文件

bin8与bin404哪个好,bin28和bin128哪个好喝(10)

就是会将日志发送到当天日期的索引汇总,没有的话自动创建索引,我们只需要做的就是每日删除旧的索引。

电子书教程推荐:http://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/introduction.html

启动方法 基于最基础的 nohup 方式 nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/agent.conf &> /dev/null 也可以用daemontools来进行管理 安装 yum -y install supervisord --enablerepo=epel 在 /etc/supervisord.conf 配置文件里添加内容,定义你要启动的程序: [program:elkpro_1] environment=LS_HEAP_SIZE=5000m directory=/opt/logstash command=/opt/logstash/bin/logstash -f /etc/logstash/pro1.conf --pluginpath /opt/logstash/plugins/ -w 10 -l /var/log/logstash/pro1.log [program:elkpro_2] environment=LS_HEAP_SIZE=5000m directory=/opt/logstash command=/opt/logstash/bin/logstash -f /etc/logstash/pro2.conf --pluginpath /opt/logstash/plugins/ -w 10 -l /var/log/logstash/pro2.log 然后启动 service supervisord start 即可。 logstash 会以 supervisord 子进程的身份运行,你还可以使用 supervisorctl 命令,单独控制一系列 logstash 子进程中某一个进程的启停操作: supervisorctl stop elkpro_2

关于grok语法

官方给定的语法

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

https://github.com/elastic/logstash/tree/v1.4.2/patterns

如果你使用的正则语言可以将nginx日志进行匹配,就可以成功对日志进行切割,效果看下图:

调试的过程中可以使用这个网站来进行正则语法的测试:http://grokdebug.herokuapp.com/

1. 线上配置的信息格式192.168.70.94 跟权威指南中的一样 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: 以下这个是Logstash默认自带了Apache标准日志的grok正则表达式: COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest })" %{NUMBER:response} (?:%{NUMBER:bytes}|-) COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} 2. 我的nginx日志切割格式 NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:tiem_local}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" MAINNGINXLOG %{COMBINEDAPACHELOG} %{QS:x_forwarded_for}

COMBINEDAPACHELOG 合并的apache日志 logstash客户端用的是这种方式 COMMONAPACHELOG 普通的apache日志

当grok匹配失败的时候,插件会为这个事件打个tag,默认是_grokparsefailure。LogStash允许你把这些处理失败的事件路由到其他地方做后续的处理 input { # ... } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{LOGLEVEL:log_level} %{GREEDYDATA:message}" } } } output { if "_grokparsefailure" in [tags] { # write events that didn't match to a file file { "path" => "/tmp/grok_failures.txt" } } else { elasticsearch { } } }

看下面红色的地方,表示grok匹配失败,才会将tags的标签定义成_grokparsefailure这个默认的

bin8与bin404哪个好,bin28和bin128哪个好喝(11)

解决说是要设置锚点 目前不懂什么意思 先放到这里

https://www.jianshu.com/p/86133dd66ca4

另外一种说法,暂时不会用,先放着 1. if "_grokparsefailure" in [tags] { drop { } } 2.match语句跟第一个一样的 没啥要点,看着官网例子搞就行了 3.尽量用grok吧 ,grep功能以后要去掉的。

当时想的另外一种解决方法就是改nginx的日志格式成json形式的,但是我不想用这种方法。

log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"request":"$request",' '"status":"$status",' '"request_method": "$request_method",' '"size":"$body_bytes_sent",' '"request_time":"$request_time",' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"url":"$uri",' '"http_forward":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"agent":"$http_user_agent"}'; access_log /var/log/nginx/access.log json ;

问题解决

Nginx日志没有被成功切割的终极原因

以下是两种日志方式: log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$host" "$request_time"'; log_format format2 '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$host" "$request_time"'; 在logstash中进行切割的时候调用的时间变量是不同的,灵感来自如下: grok { match => { "message" => "%{TIMESTAMP_ISO8601:time}" } } date{ match => ["time", "yyyy-MM-dd HH:mm:ss", "ISO8601"] target => "@timestamp" } mutate{ remove_field => ["time"] } 定义: HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT} TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? #NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:time_iso8601}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_referer}\" \"% {DATA:http_user_agent}\" {DATA:http_user_agent}\" NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{TIMESTAMP_ISO8601:time_iso8601}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_refere r}\" \"%{DATA:http_user_agent}\" SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest })" %{NUMBER:response} (?:%{NUMBER:bytes}|-) COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} Nginx中时间格式1:$time_local 对应logstash中\[%{HTTPDATE:timestamp}\] Nginx中时间格式2:$time_iso8601 对应logstash中\[%{TIMESTAMP_ISO8601:timestamp}\]

作者:思绸之路

链接:https://www.cnblogs.com/zanao/p/13072595.html

,
上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.