ELK系列文章:
一、前言:
在上篇的ELK介绍和搭建中我们完成了日志系统的了解和搭建,但是这并不能满足我们在生产中使用,我们还需要有很多自定义的配置。这篇主要介绍的就是在使用过程中碰到的一些问题,如filebeat和logstash通信问题、kibana汉化、filebeat多行传输、logstash的过滤、kibana的权限设置等。
二、filebeat和Logstash通信问题:
在filebeat中传输偶尔会报一个connection reset by peer的错误,但是这并不影响数据的传输;原理是这个错误是不同机器之间的通信问题,和服务关系不大,试着看看各自的防火墙,关于centos7访问墙跳转。此问题还有待观察
三、kibana汉化:
默认安装好是英文版的,这有点不太适合我们使用,所以汉化。打开kibana的配置文件kibana.yml,配置如下即可
i18n.locale: "zh-CN"
参考:https://www.cnblogs.com/AlienXu/p/11138340.html
四、filebeat多行传输:
filebeat默认是行传输的,但是我们的日志肯定是多行一个日志,我们要把多行合并到一起就要找到日志的规律,比如我的java日志是如下格式,都是日期开头的,所以配置如下:打开filebeat.yml
#以日期开头
multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}'
#开启多行合并
multiline.negate: true
#合并到上行之后
multiline.match: after
此时正是我们需要的数据。
参考:http://blog.sina.com.cn/s/blog_161116fe10102xl5h.html
https://my.oschina.net/openplus/blog/1589846
https://www.jianshu.com/p/2be0b41eda73
filebeat更多设置说明:https://www.cnblogs.com/whych/p/9958188.html
https://blog.csdn.net/liukuan73/article/details/52330600
五、logstash的过滤:
在生产中还有一个问题,日志所有的都记在一行看着一点也不直观,不知道那个字段分别代表什么还得自己去匹配,我们就通过logstash的过滤把数据存成不同的字段以便查阅。但这有个要求就是所有人的日志输出必须符合你过滤的条件,否则无法过滤。如下是我日志格式:日期 [类型] [类] [方法] [IP及端口] [操作人] [说明].......
找到了规律那我们就通过logstash把他们分隔成不同的字段,修改logstash-sample.conf
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
filter {
grok {
match => {
"message" => "(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3}) \[%{LOGLEVEL:level}\] \[%{USERNAME:class}\]\s\[(?<method>.*)\]\s\[%{HOSTPORT:ip}\] \[%{USERNAME:user}\]\s\[(?<des>.*)\]\s\[(?<flag>.*)\]\s\[(?<per>.*)\]\s\[(?<dto>.*)"
}
}
}
output {
elasticsearch {
hosts => ["http://198.218.*.*:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
添加了一个过滤,通过grok正则去分隔字段,分隔完成效果如下
参考:https://www.missshi.cn/api/view/blog/5ac6dea622890914df000001
https://blog.csdn.net/qq_39211866/article/details/84453004
六、Elasticsearch报错:
- 启动报错:[WARN ][r.suppressed ] [node-1] path: /.kibana_task_manager/_search, params: {ignore_unavailable=true, index=.kibana_task_manager} org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed;
这个错是索引分片的问题,一般如果没有用过此索引直接删除此索引即可。
curl -XDELETE http://localhost:9200/.kibana_task_manager
- 启动报错:No shard available for [get [.kibana][_doc][space:default]: routing [null]]
这个错是因为安装的时候Elasticsearch是单节点,但是分片默认有一个副分区,所以报此警告
- Elasticsearch状态一直为yellow
这个也是因为Elasticsearch单节点导致,具体原因请参考如下文章
参考:https://blog.csdn.net/gamer_gyt/article/details/53230165
https://blog.csdn.net/quicknet/article/details/43915417
https://blog.csdn.net/weixin_34399060/article/details/92382701
结束:
到此一些常见的问题及使用就完了,后续在使用过程中不断更新