Grafana+InfluxDB+TelegrafでRaspberryPiの監視をしてみる

2022/06/14

Linux OracleCloud RaspberryPi

t f B! P L

様々なログを取り込んで、見た目をカッコよくしてくれるツールが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)

検索

Blog Archive

Popular Posts

About Me

自分の写真
性別:男
年齢:ついに40over
趣味:Snowboard、パソコン、iPhone、子育て

仕事:ユー子の社内SEとしてサーバ、NW等のインフラ全般をやってます

日々生活していく中で思ったことなどをつらつらと書いていきます。

どうぞよろしく!

ブログランキング

ブログランキング・にほんブログ村へ

QooQ