はじめに
前回記事では、ラズパイのsyslogをTftpd64で閲覧した
Tftpd64は手軽で動作確認程度には使えるけれども、監視対象が多くなると手に負えなくなる(ことは火を見るよりも明らか)
いずれは、ラズパイのsyslogをもっとグラフィカルに見たい
今回は、その足掛かりとしてEFKログ基盤を構築し
まずはHTTPアクセスのログが採れるか試す
EFKログ基盤とは?
複数ソースから集めたデータを見やすくしてくれるOSS軍団である
OSSなのでもちろん無料で試せます
EdgeのサイドバーにいるAIチャットに聞いてみた
efkログ基盤とは、Elasticsearch、Fluentd、Kibanaの3つのオープンソースソフトウェアを組み合わせたログ収集・分析基盤です。Elasticsearchはログデータの検索・分析を行うための検索エンジン、Fluentdはログデータを収集するためのデータ収集エージェント、Kibanaは収集したログデータを可視化するためのダッシュボードツールです。¹²¹: Elasticsearch + Fluentd + Kibanaで作るログ基盤 - Qiita
²: EFK ログ基盤とは? | さくらのナレッジ
ソース: Bing との会話 2023/6/11(1) Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法. https://atmarkit.itmedia.co.jp/ait/articles/1704/06/news013.html アクセス日時 2023/6/11.
(2) OpenShiftのEFKログ基盤 - 赤帽エンジニアブログ. https://rheb.hatenablog.com/entry/openshift-20181211 アクセス日時 2023/6/11.
(3) EFK(Elasticsearch,Fluentd,Kibana)で簡単ログ基盤をdocker .... https://qiita.com/foursue/items/9add0ec18efacb2fc2d2 アクセス日時 2023/6/11.
Docker Composeで環境をつくる
Fluentd 1.0 の公式サイトに、Docker Composeのサンプルが載っている
手順に沿って、docker-compose.yml
ファイルやコンフィグファイルを作成し、いざdocker compose up
をするとエラーが出る(※2023年6月10日時点)
<エラー内容>
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in 'require': cannot load such file -- elasticsearch/transport/transport/connections/selector (LoadError)
同エラーを報告しているGithubのIssueを参考に直す
依然として、webコンテナが立ち上がらない・・・
時間が解決するらしい
webコンテナを立ち上げようとしたときのエラー内容
<web-1エラー内容>
Error response from daemon: failed to initialize logging driver: dial tcp [::1]:24224: connect: connection refused
まだローカルホストの24224ポートにアクセスできない
いろいろ調べてみたが、結局1分ほど時間をおけば、立ち上がる
fluentdのエラー
立ち上がらない間のfluentdのエラー内容は以下の通り
<fluentd-1エラー>
unexpected error error_class=Elastic::Transport::Transport::Error error="Connection refused - connect(2) for 172.25.0.2:9200 (Errno::ECONNREFUSED)"
docker-compose.yml
にdepends on
をつけても解消しなかった
Kibanaをセットアップする
http://localhost:5601/app/management/kibana/indexPatterns
にアクセスして、fluentd-*
という名のdata viewをつくる
localhost:80にHTTPでアクセスしたときのログ
公式の手順書ではcurl
を使うと書いてあるが
httpdイメージにはデフォルトでcurl
コマンドが入っていないので
ブラウザからlocalhost:80
に10回ほどアクセスする
ある時間にログが集中しており、HTTP-GETが連続しているログが残っている
おわりに
Fluentd公式サイトにあるDocker Composeのサンプルを使って
HTTPアクセスのログをグラフィカルに見ることができた
これを応用して、syslogなど他のログも同様に可視化したい
参考
付録
Dockerfile
バージョンは5.2.4を使った
# fluentd/Dockerfile
FROM fluent/fluentd:v1.12.0-debian-1.0
USER root
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "5.2.4"]
USER fluent
docker-compose.yml
kibanaとelasticsearchのバージョンは8.1.2を使った
また、elasticsearchのenvironmentにセキュリティを甘くする1行を追加した
version: "3"
services:
web:
image: httpd
ports:
- "80:80"
links:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: httpd.access
fluentd:
build: ./fluentd
volumes:
- ./fluentd/conf:/fluentd/etc
links:
- "elasticsearch"
ports:
- "24224:24224"
- "24224:24224/udp"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.1.2
container_name: elasticsearch
environment:
- "discovery.type=single-node"
- xpack.security.enabled=false
expose:
- "9200"
ports:
- "9200:9200"
kibana:
image: docker.elastic.co/kibana/kibana:8.1.2
links:
- "elasticsearch"
ports:
- "5601:5601"