1
2

More than 1 year has passed since last update.

[Docker] ラズパイのsyslogをKibanaで閲覧する [EFKスタック]

Posted at

はじめに

前回記事では、LAN内にあるラズパイからのsyslogやHTTP通信をfluentdで捕捉した

ポイントはfluentdをDockerコンテナで作成したことである
Windowsマシン内にあるDockerコンテナにsyslog、http通信が届くようにするためには
WIndowsマシンのポートフォワードを設定する必要があった

本記事は

前回のつづきとして、fluentdで捕捉したデータをElasticsearch, Kibanaへ連携し
LAN内のラズパイから送られてくるsyslogの内容をKibanaで閲覧する

fluentdでは、単にテキストが画面を流れるだけであったが
Kibanaを使うことでグラフィカルに、人が見やすい形でsyslogの内容を把握することができる

ラズパイのsyslog設定

ラズパイのsyslogコンフィグには、TCP通信でWindowsマシンにログを送るように設定している

TeraTermで接続したラズパイで実行
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コンテナは前回までの名残なので、無くても動作する

fluent.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

「Create Data View」を押す

image.png

fluentdから始まるインデックスが2つ見えているが、mysyslogから始まるインデックスが見当たらない

ラズパイから syslog を送る

fluentd(Elasticsearch?)にインデックスを作成するために
1回ラズパイからsyslogを送る

ラズパイで実行
logger -p local0.info "Message from RaspberryPi"

Kibanaのサイトをリロードすると、mysyslogから始まるインデックスが作成されている

image.png

mysyslog-*を入力して、クリエイト

image.png

KibanaのDiscover

LAN内のラズパイから受け取ったメッセージが見える

image.png

ラズパイのサービスを再起動したときのログ

ラズパイsyslogサービスを再起動してみる

ラズパイのsyslogを再起動する
systemctl restart rsyslog.service

Kibanaをリロードする

image.png

ログが記録されている

まとめ

LAN内にあるラズパイのsyslogをKibanaで見える化した

今回は1台のラズパイであったが、もっと複数台あれば楽しそう

惜しむらくは syslog がUDPであり、WSL2はUDPをポートフォワードできないということ・・・
早くここは改善してほしい

糸冬了!!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2