在[Kibana]上查看[Raspberry Pi]的syslog日志 [使用EFK堆栈]
首先
在上一篇文章中,我们使用fluentd捕捉了位于局域网内的树莓派发送的syslog和HTTP通信。
重点在于使用Docker容器创建了fluentd。为了将syslog和http通信发送到Windows机器内的Docker容器,需要进行Windows机器的端口转发设置。
This article is about.
作为前一个会话的延续,将由fluentd捕获的数据与Elasticsearch和Kibana进行协作,
在Kibana上浏览从局域网中树莓派发送的syslog内容。
通过使用Kibana,Fluentd可以将syslog的内容以图形化、易于人们阅读的形式呈现,而不仅仅是简单地以文本形式流动在屏幕上。
树莓派的syslog设置
在树莓派的syslog配置中,已经将日志设置为通过TCP通信发送至Windows机器。
sudo vim /etc/rsyslog.conf
Docker的flunetd暴露了5140端口,因此需要指定5140端口。
树莓派的设置就是以上内容。
Docker Compose文件
重点是设定时区。
即使树莓派的时间准确无误,如果fluentd的时间是标准时间,
那么树莓派的日志在fluentd看来将成为未来事件,
导致Kibana无法显示日志(可能是9小时之后才能显示)。
version: "3"
services:
fluentd:
build: ./fluentd
volumes:
- ./fluentd/conf:/fluentd/etc
ports:
- "24224:24224"
- "24224:24224/udp"
- "5140:5140"
networks:
efk-net:
ipv4_address: 172.22.0.10
environment:
TZ: Asia/Tokyo
web:
image: nginx:alpine-slim
ports:
- 8000:80
logging:
driver: "fluentd"
options:
fluentd-address: 172.22.0.10:24224
fluentd-async-connect: "true"
fluentd-retry-wait: 2s
fluentd-max-retries: 30
tag: httpd.access
networks:
efk-net:
ipv4_address: 172.22.0.20
depends_on:
- fluentd
environment:
TZ: Asia/Tokyo
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.1.2
container_name: elasticsearch
environment:
- "discovery.type=single-node"
- xpack.security.enabled=false
- "TZ=Asia/Tokyo"
ports:
- "9200:9200"
networks:
- efk-net
kibana:
image: docker.elastic.co/kibana/kibana:8.1.2
ports:
- "5601:5601"
networks:
- efk-net
environment:
- "TZ=Asia/Tokyo"
- i18n.locale=ja-JP
networks:
efk-net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.22.0.0/16
另外,由于Web容器是上一次的遗留物,所以即使没有它也可以运行。
流利的.conf
syslog的默认协议是UDP,因此需要指定协议类型为TCP(protocol_type tcp)。
logstash_prefix 将成为 Kibana 端的索引
-
- ラズパイからのsyslogはmysyslogから始まるインデックス
- Dockerネットワーク内のwebコンテナからのログはfluentdから始まるインデックス
可以根据个人喜好指定日期格式。只需按照以下方式操作,日期和时间之间将不会出现多余的连字符或其他符号,而是以连续的数字显示。
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<source>
@type syslog
port 5140
bind 0.0.0.0
protocol_type tcp
tag raspi
source_hostname_key true
</source>
<match raspi.*.**>
@type copy
<store>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix mysyslog
logstash_dateformat %Y%m%d
flush_interval 1s
</store>
<store>
@type stdout
</store>
</match>
<match httpd.**>
@type copy
<store>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix fluentd
logstash_dateformat %Y%m%d
include_tag_key true
type_name access_log
tag_key @log_name
flush_interval 1s
</store>
<store>
@type stdout
</store>
</match>
启动Docker容器
同时启动容器并在屏幕上显示日志。
docker compose up -d && docker compose logs -f
创建Kibana索引
访问 http://localhost:5601/app/management/kibana/dataViews
点击”创建数据视图”
现在能看到两个以fluentd开头的索引,但是找不到以mysyslog开头的索引。
使用树莓派发送 syslog
为了通过Fluentd(Elasticsearch?)创建索引,从树莓派发送一次syslog。
logger -p local0.info "Message from RaspberryPi"
当重新加载Kibana网站时,将创建以mysyslog开头的索引。
输入”mysyslog-*”来创建。
Kibana的Discover功能
可以看到从局域网内的树莓派接收到的消息
重新启动树莓派服务时的日志
尝试重新启动树莓派的syslog服务。
systemctl restart rsyslog.service
重新加载Kibana
日志已记录
总结
在LAN网络中,将树莓派的系统日志通过Kibana可视化。
这次只有一台树莓派,但如果有更多台的话,看起来会更有趣。
很遺憾的是,syslog 是基於UDP協議,而WSL2無法進行UDP端口轉發…我希望這個問題能盡快得到改善。