様々なログを取り込んで、見た目をカッコよくしてくれるツールがGrafana。
ログデータの保管場所となるデータベースがInfluxDB。
サーバ等に稼働して様々な情報を採取し、データを転送するのがTelegraf。
これら全てオープンソースなので、無料で使えます。
でも、情報は英語が大半w
ググれば色んな人が使っているみたいなので、俺もチャレンジしてみました。
似たようなツールとして、ELK Stack(ElasticSearch、Logstash、Kibana)があります。
ELKも試してみたんだけど、
- 何故かOCIのサーバ上でDockerコンテナに実装できない
- サーバに直接インストールして、ElasticSearchとKibanaは動いたがLogstashが動かなかった
- FileBeatでLogstashにログ転送ができない
と、 踏んだり蹴ったりでかなりハマった。
一方で、Grafana+InfluxDB+Telegrafは全てDockerでサクサクっと実装ができたのと、サーバリソースは殆ど使わなくて軽量。
ググった情報はELKの方が多いが、Grafanaの方が連携できるプラグインが非常に多いのでGrafanaメインで使ってみよう、という結論に至った。
システム構成
こんな感じ。
実装するツールは全てDocker上で動かす。
OCI上にサーバを動かしてパブリック接続。
エージェントとなるTelegrafはRaspberryPiに実装。
Grafana、InfluxDBの実装
GrafanaとInfluxDBをDockerで実装する。
例のごとくDockerのインストールは省略。
docker-compose.ymlは以下とした。
version: "3" services: influxdb: image: influxdb container_name: influxdb hostname: influxdb volumes: - ./influx_data:/var/lib/influxdb2 - ./influx_config:/etc/influxdb2 ports: - 8086:8086 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME="ユーザー名" - DOCKER_INFLUXDB_INIT_PASSWORD="パスワード" - DOCKER_INFLUXDB_INIT_ORG="任意の組織名" - DOCKER_INFLUXDB_INIT_BUCKET="任意のバケット名" restart: always grafana: image: grafana/grafana container_name: grafana ports: - 3000:3000 user: "0:0" volumes: - ./grafana:/var/lib/grafana depends_on: - influxdb environment: - GF_SERVER_ROOT_URL=http://localhost:3000 - GF_SECURITY_ADMIN_PASSWORD="パスワード" restart: always
あとは"docker-compose up -d"をするだけ。
俺の環境ではnginx-proxyでリバースプロキシを挟んでいるのでこの通りじゃないけど。
Grafanaの設定
Grafanaの設定として、データソースにInfluxDBを追加する必要がある。
そのためにまずはInfluxDBの情報を確認。
以下のコマンドを実行し、トークン情報を確認する。
cat ./influx_config/influx-configs [default] url = "http://localhost:8086" token = "TOKENTOKENTOKENTOKEN" ※この部分をコピーする。 org = "任意の組織名" active = true
次にGrafanaにログインする。
ブラウザから”http://<IPアドレス>:3000”にアクセス。
以下のログイン画面が表示されるので、
ユーザー名は「admin」、パスワードは上記で設定した内容でログインする。
ログインできますた。
InfluxDBをデータソースとして追加する。
Configurationsから「Data Sources」をクリックする。
「Add data source」をクリックする。
「InfluxDB」を選択する。
Query Languageを「Flux」にする。
URLには「http://influxdb:8086」(Dockerのコンテナ名でOK)
「Basic auth」をオフにする。
InfluxDB Detailsで、
「Organization」に設定した組織名を、
「Token」に先ほど確認したトークンを、
「Default Bucket」に設定したバケット名を
それぞれ入力し、「Save & test」をクリックする。
正常に設定できれば、「3 buckets found」と表示される。
あとはダッシュボードの作成。
新規で作る場合は「Create」の「Dashboard」をクリックする。
新規の画面で、「Add a new panel」をクリックし、
表示させたいグラフの種類や表示させたいクエリを設定していく。
新規でイチからダッシュボードを作るのが一番大変wwwwwwwwwww
DBの構造を把握して、各クエリを設定しないといけないからやってらんない。
なので、ここからテンプレートを流用するのが手っ取り早い。
対応しているデータソースがあれば、の話だけども。
Telegrafの構築および設定
次に取得対象のノードで情報を収集およびInfluxDBにデータを送信するTelegrafの構築を行う。
こちらもdocker-compose.ymlを用意して起動するだけ。
version: "3" services: telegraf: image: telegraf container_name: telegraf volumes: - ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro - /var/run/docker.sock:/var/run/docker.sock - /:/rootfs:ro environment: HOST_PROC: /rootfs/proc HOST_SYS: /rootfs/sys HOST_ETC: /rootfs/etc HOST_VAR: /rootfs/var HOST_RUN: /root/run HOST_MOUNT_PREFIX: /root restart: always privileged: true
起動が出来たら、telegraf.confファイルを編集する。(最低でも太字箇所)
vi ./telegraf/telegraf.conf ※一部のみ抜粋。 [agent] interval = "60s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "" hostname = "ホスト名" ※Dockerだと適当なホスト名になるので明示必須 omit_hostname = false [[outputs.influxdb_v2]] urls = ["http://"InfluxDBのIP":8086"] token = "トークン" organization = "任意の組織名" bucket = "任意のバケット名" timeout = "5s"
編集が出来たらコンテナ再起動。
ログに何もエラーが出なければとりあえずはOK。
Grafanaでのダッシュボード作成(というかインポート)
多分これが一番シンドイし、頭使うwwwwwww
イチからダッシュボードを作れるほど賢くないので、
テンプレートからインポートします。
ここから探します。
で、以下のテンプレートを流用させてもらいますた。
Telegraf Metrics dashboard for InfluxDB 2.0 (Flux) dashboard for Grafana | Grafana Labs
こちらのIDをコピーして、Grafanaからインポート。
こんな感じになりましたー。
RaspberryPiだけじゃなくて、OCIで稼働している各仮想サーバにも登録。
アラート設定とかも出来るようなので、
うまく使いこなせば監視ツールとしても使えるのかな?
Grafanaはデータソース次第で可能性は無限大
Grafanaの唯一の欠点はデータソースが別で必須であること。
言うなれば、いろいろなデータソースと連携させることができるので、
いろんなデータを可視化することが出来るというわけ。
これを使って次はHoneypotであるCowrieのログを表示させたいと思います。
(もう実装できたので後は頑張ってブログ記事を書くだけw)
0 件のコメント:
コメントを投稿