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数据库中。

posted @   ylijun  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示