任何的调试都需要先明白逻辑,知道程序的调用的先后顺序。
我这里是 filebaet --> kafka --> logstash --> es --> kibana 数据推送。
filebaet 调试
如何确定 filebaet 是否在传输数据
# 查看服务状态
systemctl status filebeat.service
# 检查配置文件是否正确
filebeat test config -e
# 检查 es / Logstash / kafka 的连接是否正常
filebeat test output
# 检查日志
tail -f /var/log/filebeat/filebeat
# 检查系统日志是否存在错误
tail -f /var/log/messages
# telnet es/logstash/kafka端口
telnet 10.10.1.10 9092
# iftop 查看流量
iftop
# tcpdump 抓包查看是否有流量
tcpdump -i any host 10.10.1.10 and port 9092
kafka 调试
# 查看 kafka 状态
systemctl status kafka
# 查看 zookeeper 状态
/usr/local/zookeeper/bin/zkServer.sh status
# 查看端口
netstat -lntp
# telnet
# 查看日志
tail -f /usr/local/kafka/logs/server.log
# 查看 topic 信息
/usr/local/kafka/bin/kafka-topics.sh --describe --bootstrap-server 10.10.1.10:9092 --topic elktest
有时候显示 Leader:noe 则说明集群可能存在问题
# 查看实时数据流
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.1.10:9092,10.10.1.11:9092,10.10.1.12:9092 --topic elktest
# 从头查看消费的数据
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.1.10:9092,10.10.1.11:9092,10.10.1.12:9092 --topic elktest --from-beginning
没数据可能就是有问题
logstash 调试
一定要按功能分开每个 logstash 的文件
调试正则时可以在 kibana 页面的开发者工具中进行调整
# 查看状态
systemctl status logstash.service
# 查看日志
tail -f /var/log/logstash/logstash-plain.log
grep -i 'error' /var/log/logstash/logstash-plain.log
# telnet kafka / es 的地址端口
# tcpdump 抓包查看是否有流量
tcpdump -i any host 10.10.1.10 and port 9200
重点过滤下 error 信息
# 检查配置文件是否错误
/usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/nginx.conf
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[INFO ] 2024-08-27 21:27:28.219 [main] runner - Starting Logstash {"logstash.version"=>"7.9.2", "jruby.version"=>"jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 25.322-b06 on 1.8.0_322-b06 +indy +jit [linux-x86_64]"}
[WARN ] 2024-08-27 21:27:28.568 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ] 2024-08-27 21:27:31.321 [LogStash::Runner] Reflections - Reflections took 87 ms to scan 1 urls, producing 22 keys and 45 values
Configuration OK # 这就没毛病
[INFO ] 2024-08-27 21:27:31.902 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
# 修改日志级别为 debug
vim /etc/logstash/logstash.yml
log.level: debug
# 将输出改成输出到控制台
vim /etc/logstash/conf.d/nginx.conf
···
output {
stdout {
codec => rubydebug
}
}
最简单的办法就是使用排除法,将配置文件移走,在重启 logstash 看看 es 里有没有数据。
简单的可以用系统日志做测试,开启 ssh 新连接和关闭连接都能产生日志。
es 调试
直接从 kibana 看正常不正常就好了
关于获取防火墙 waf 交换机日志
需要在防火墙/waf/交换机上配置推送地址,在服务器上使用 rsyslog 的 514 端口接收日志,保存到服务器上后,使用 filebate 推送即可。
rsyslog 配置极为简单,自行百度即可。