filebeat收集日志输出到redis
目的:使用 filebeat 收集日志,将日志信息存储到 redis ---持久化存储,减轻 localstorage 的压力
前提:安装了 Elasticsearch 跟 filebeat,并启动 Elasticsearch
问题:redis安装成功,配置文件修改成功,重新启动数据库。然后在另一台节点使用 nc 命令模拟客户端发送数据并指定端口(在 .yml 文件中定义的端口),但是在 redis 数据库中并找不到对应的日志信息。
[root@elk30 filebeat-config]# redis-cli -a redis@123 -h 192.168.10.30 -p "6379" -n 5
192.168.10.30:6379[5]> keys *
(empty list or set)
排查思路:
1、检查所有节点的防火墙是否关闭(或者开放指定端口)
systemctl status firewalld
2、检查所有节点的 SELINUX 是否呈关闭状态
getenforce 0
3、检查 Elasticsearch 跟 filebeat 是否正常运行
systemctl status elasticsearch
systemctl status filebeat
4、检查 redis 端口,服务是否正常工作
systemctl status redis
netstat -tunlp |grep 6379
5、检查 .yml 文件
vim output_redis.yml
filebeat.inputs:
- type: tcp
host: "192.168.10.30:9000"
output.redis:
hosts: ["192.168.10.30"]
password: "123"
key: "filebeat"
db: 5
timeout: 3
6、检查 redis 配置文件,看 bind 允许哪些 ip/port 进行访问;检查 requirepass,看密码是否一致
vim /etc/redis.conf
# Examples:
#
# bind 192.168.1.100 10.0.0.1
bind 0.0.0.0
# use a very strong password otherwise it will be very easy to break.
#
requirepass 123
重新执行 .yml 文件,再次使用 nc 命令模拟客户端写入数据
[root@elk40 ~]# nc 192.168.10.30 9000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
111111111111111111111111111111111111
222222222222222222222222222222222222
查看 redis 数据库
[root@elk30 filebeat-config]# redis-cli -a 123 -n 5
127.0.0.1:6379[5]> keys *
1) "filebeat"
127.0.0.1:6379[5]> type filebeat
list
127.0.0.1:6379[5]> LRANGE filebeat 0 3
1) "{\"@timestamp\":\"2024-12-04T07:16:18.224Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"8.11.0\"},\"ecs\":{\"version\":\"8.0.0\"},\"host\":{\"name\":\"elk30\"},\"agent\":{\"name\":\"elk30\",\"type\":\"filebeat\",\"version\":\"8.11.0\",\"ephemeral_id\":\"0355df19-284d-4565-9e44-8d4a2223b1f5\",\"id\":\"fa8e5b28-6326-4b99-b7a9-e29446680ffd\"},\"message\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"log\":{\"source\":{\"address\":\"192.168.10.40:54024\"}},\"input\":{\"type\":\"tcp\"}}"
2) "{\"@timestamp\":\"2024-12-04T07:16:22.188Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"8.11.0\"},\"message\":\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\"log\":{\"source\":{\"address\":\"192.168.10.40:54024\"}},\"input\":{\"type\":\"tcp\"},\"host\":{\"name\":\"elk30\"},\"agent\":{\"name\":\"elk30\",\"type\":\"filebeat\",\"version\":\"8.11.0\",\"ephemeral_id\":\"0355df19-284d-4565-9e44-8d4a2223b1f5\",\"id\":\"fa8e5b28-6326-4b99-b7a9-e29446680ffd\"},\"ecs\":{\"version\":\"8.0.0\"}}"
3) "{\"@timestamp\":\"2024-12-04T07:16:25.767Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"8.11.0\"},\"ecs\":{\"version\":\"8.0.0\"},\"host\":{\"name\":\"elk30\"},\"agent\":{\"version\":\"8.11.0\",\"ephemeral_id\":\"0355df19-284d-4565-9e44-8d4a2223b1f5\",\"id\":\"fa8e5b28-6326-4b99-b7a9-e29446680ffd\",\"name\":\"elk30\",\"type\":\"filebeat\"},\"message\":\"111111111111111111111111111111111111\",\"log\":{\"source\":{\"address\":\"192.168.10.40:54024\"}},\"input\":{\"type\":\"tcp\"}}"
4) "{\"@timestamp\":\"2024-12-04T07:16:28.389Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"8.11.0\"},\"ecs\":{\"version\":\"8.0.0\"},\"host\":{\"name\":\"elk30\"},\"agent\":{\"name\":\"elk30\",\"type\":\"filebeat\",\"version\":\"8.11.0\",\"ephemeral_id\":\"0355df19-284d-4565-9e44-8d4a2223b1f5\",\"id\":\"fa8e5b28-6326-4b99-b7a9-e29446680ffd\"},\"message\":\"222222222222222222222222222222222222\",\"log\":{\"source\":{\"address\":\"192.168.10.40:54024\"}},\"input\":{\"type\":\"tcp\"}}"
127.0.0.1:6379[5]> exit
大致就是这些排查思路,最后是在 redis 配置文件中发现定义了两个 bind,一个是 0.0.0.0 允许所有端口进行访问;另一个是 127.0.0.1 允许本机访问,多个 bind 可能产生了冲突,导致 filebeat收集到日志信息但是写入不了 redis数据库中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了