在[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端口。

image.png

树莓派的设置就是以上内容。

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

image.png

点击”创建数据视图”

image.png

现在能看到两个以fluentd开头的索引,但是找不到以mysyslog开头的索引。

使用树莓派发送 syslog

为了通过Fluentd(Elasticsearch?)创建索引,从树莓派发送一次syslog。

logger -p local0.info "Message from RaspberryPi"

当重新加载Kibana网站时,将创建以mysyslog开头的索引。

image.png

输入”mysyslog-*”来创建。

image.png

Kibana的Discover功能

可以看到从局域网内的树莓派接收到的消息

image.png

重新启动树莓派服务时的日志

尝试重新启动树莓派的syslog服务。

systemctl restart rsyslog.service

重新加载Kibana

image.png

日志已记录

总结

在LAN网络中,将树莓派的系统日志通过Kibana可视化。

这次只有一台树莓派,但如果有更多台的话,看起来会更有趣。

很遺憾的是,syslog 是基於UDP協議,而WSL2無法進行UDP端口轉發…我希望這個問題能盡快得到改善。

 

冬天到了!!

广告
将在 10 秒后关闭
bannerAds