LoginSignup
10
12

More than 5 years have passed since last update.

fluentd+influxDB+Grafanaの導入

Last updated at Posted at 2016-01-20

fluentd+influxDB+Grafanaの導入

  • 時系列データをグラフ化しよう!
ポートを利用するライブラリ 目的 ポート番号
nginx - 80
influxDB - 8083
influxDB - 8086
influxDB - 8090
influxDB - 8099

※ポート番号の解説はinfluxDB installationを参照

1 nginxの導入を行います。

~/OneDrive/Manuals/nginx.mdに従って、nginxを導入します。

2 influxDBの導入を行います。

~/OneDrive/Manuals/influxDB.mdに従って、influxDBを導入します。

3 Grafanaのダウンロード・セットアップを実行します。

3.1 Grafana本体のダウンロードセットアップを行います。

mkdir /usr/local/download
cd /usr/local/download
yum -y install wget
yum -y install tar
wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz
tar xzvf grafana-1.9.1.tar.gz
mv grafana-1.9.1 grafana
mv grafana /var/www

3.2 GrafanaをInfluxDB用に設定します。

cd /var/www/
cp /var/www/grafana/config.sample.js /var/www/grafana/config.js
vi grafana/config.js
  • vi grafana/config.js
  • ==コメントアウトを解除すること==
datasources: {
        influxdb: {
          type: 'influxdb',
          url: "http://10.0.0.1:8086/db/grafanadb",
          username: 'soushi',
          password: 'soushi',
        },
        grafana: {
          type: 'influxdb',
          url: "http://10.0.0.1:8086/db/grafanaconf",
          username: 'soushi',
          password: 'soushi',
          grafanaDB: true
        },
      },

2.4 Grafanaのフロントエンドにアクセスします。

2.4.1 ブラウザでhttp://10.0.0.1:80/grafana/ にアクセスする。

  • 下記画面が表示されれば正常。もし、上のバーのみ表示されて、他には何も表示されない(Welcome to Grafanaなどが表示されない)場合、grafanaの設定ファイル(/var/www/html/grafana/config.js)のコメントアウトが解除されているかどうかをチェックすること。

Grafana Fig 4.png

2.5 サンプルデータの挿入

2.5.1 InfluxDBにサンプルデータを挿入するスクリプトを作成します。

cat <<< '#!/bin/bash

T=`ruby -e "puts Time.now.to_i * 1000"`
V=`echo $RANDOM`
cat << EOT > data
[
  {
    "name": "sample",
    "columns": ["time", "value"],
    "points": [
      [$T, $V]
    ]
  }
]
EOT
curl -v --dump-header - -X POST "http://localhost:8086/db/grafanadb/series?u=soushi&p=soushi" -d @data' > ~/SampleGenerator.sh
  • 作成されるジェネレータスクリプト(SampleGenerator.sh)の内容
#!/bin/bash

T=`ruby -e "puts Time.now.to_i * 1000"`
V=`echo $RANDOM`
cat << EOT > data
[
  {
    "name": "sample",
    "columns": ["time", "value"],
    "points": [
      [$T, $V]
    ]
  }
]
EOT
curl -v --dump-header - -X POST "http://localhost:8086/db/grafanadb/series?u= soushi&p= soushi" -d @data
chmod +x ~/SampleGenerator.sh

2.5.2 watchコマンドで定期的にサンプルデータを挿入します。

watch -n 1 ~/SampleGenerator.sh

2.5.3 InfluxDBのフロントエンドにアクセスして、挿入されたデータを表示します。

2.5.3.1 http://10.0.0.1:8083/ にアクセスします。

==InfluxDBのAdmin UIにアクセス出来ない場合は、下記コマンドを実行して、データを削除する。但し、データを削除するため正式サービスでは使用できない…。==

rm -rf /opt/influxdb/shared/data/raft/

2.5.3.2 ログインします。

設定値
初期ログインID root
初期パスワード root
ホストネーム 10.0.0.1
ホストポート番号 8086

2.5.3.3 grafanadb -> Explore Dataをクリックし、SELECT文を発行します。「select * from sample」

uploading Grafana Fig 5.png...
Grafana Fig 5.png
Grafana Fig 6.png

2.6 Grafanaのフロントエンドにアクセスし、挿入されたデータを表示します。

2.6.1 http://10.0.0.1/grafana/ にアクセスします。
2.6.2 グラフのタイトルをクリックし、Editボタンを押します。

Grafana Fig 7.png

2.6.3 Graph-Metrics->series項目に、「sample」を追加します。

![Grafana - データソースの選択 - シリーズの選択]

Grafana Fig 8.png

2.6.4 グラフが表示されます。

==表示されない場合は、vmのtimezoneの設定や、時刻があっているかどうかを確認すること。こちらを参照==

  • 時刻の即時調整は、ホストVM上で下記コマンドを実行
ntpdate clock.nc.fukuoka-u.ac.jp

Grafana Fig 9.png

2.6 ホストVM上に、dockerコンテナ毎のリソース使用量監視デーモンを導入します。

2.6.1 Go言語のインストール

項目
goのインストール場所 /usr/bin/go
GOPATHの値(何でも良い) /usr/local/go

※GOPATHの値についての解説はこちら

yum -y --enablerepo=epel install golang
mkdir /usr/local/go
echo 'export GOPATH=/usr/local/go' >> /etc/profile
export GOPATH=/usr/local/go

2.6.2 jqコマンドをインストールします。

jqコマンドの詳細についてはこちら

cd /usr/local/download
wget http://stedolan.github.io/jq/download/linux64/jq
chmod +x jq
mv jq /usr/local/bin/

2.6.3 コンテナリソース使用量監視デーモンを設定・起動します。

2.6.3.1

mkdir /usr/local/download
cd /usr/local/download
git clone https://github.com/maebashi/docker-metricsd.git
cd docker-metricsd
go get -d -v
go build docker-metricsd.go
mv /usr/local/download/docker-metricsd/docker-metricsd /etc/init.d/

2.6.3.2 コンテナのリソース使用量を取得してみます。

==公式マニュアルの日本語訳はこちら==
==jqコマンドの簡単な説明はこちら==

-curl http://<ホストVMのIPアドレス>:12375/containers/<監視するdockerのID(docker psコマンドで表示されるID)>/json | jq .

curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq .
  • jqコマンドの結果、下記のように整形されて表示されます。
(略)
   "cpuacct": {
      "cpu_usage": {
        "total_usage": 162540445,
        "percpu_usage": [
          22953770,
          40554065,
          64838051,
          34194559
        ],
        "usage_in_kernelmode": 30000000,
        "usage_in_usermode": 0
      },
      "throttling_data": {}
    },
    "memory": {
      "usage": 11755520,
      "max_usage": 12083200,
      "stats": {
        "active_anon": 2441216,
        "active_file": 2342912,
...
  • jqコマンドでCPU負荷を取得します。
  • つまり"Metrics"->"cpuacct"->"cpu_usage"->"total_usage"を取得すれば良いので・・・
curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq '.Metrics.cpuacct.cpu_usage.total_usage'
  • CPUコア毎の負荷は、percpu_usageが配列になっているので、次のようにして取得します。
curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq '.Metrics.cpuacct.cpu_usage.percpu_usage[]'
22953770
40554065
64838051
34194559
  • 0番目のCPUコアの負荷は、次のようにして取得します。
curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq '.Metrics.cpuacct.cpu_usage.percpu_usage[0]'
22953770
  • 複数の項目のみを取り出したJSONに直すこともできます。(カンマ区切りにする) ※CPUの合計負荷とメモリ使用量を取得
curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq '.Metrics.cpuacct.cpu_usage.total_usage, .Metrics.memory.usage'
162540445
11755520

==jqでbash変数の値を使う方法==

  • --arg VAR_NAME $VARNAMEオプションを使う。
  • NAME="soushi"; jq --arg NAME $NAME '{"name": $NAME}'

2.6.3.3 influxdbにリソース使用量を送信するスクリプトを生成します。

cat <<< '#!/bin/bash

T=`ruby -e "puts Time.now.to_i * 1000"`
data=`curl -s http://192.168.66.201:12375/containers/31f9c4bd79b3/json | jq --arg T $T  "[{"name": "cpu_total_usage", "columns": ["time", "values"], "points": [[$T, .Metrics.cpuacct.cpu_usage.total_usage]]}, {"name": "memory_usage", "columns": ["time", "values"], "points": [[$T, .Metrics.memory.usage]]}]"`

curl -v --dump-header - -X POST "http://10.0.0.1:8086/db/grafanadb/series?u=soushi&p=soushi" -d @data' > ~/send_container_status.sh

3 fluentdを導入します。

名前 場所
fluentd本体 /usr/local/rvm/gems/ruby-1.9.3-p551/bin/fluentd
fluentd設定ファイル /etc/fluent/fluent.conf

3.1 Ruby+gemsをインストールします。

こちらのマニュアルを参照

3.2 fluentd本体とinfluxdb用のプラグインをインストールします。

gem install fluentd fluent-plugin-influxdb
fluentd --setup /etc/fluent

4 サンプルプログラムのダウンロードと実行



  • 第1章〜第2章(grafana+influxdb)までの実行コードはこちら
  • 第1章〜第2章(grafana+influxdb)までを実行済みのdockerファイルはこちら
  • 第3章(fluentd)のみの実行コードはこちら
  • 第1章〜第3章(grafana+influxdb+fluentd)までの実行コードはこちら
  • 第1章〜第3章(grafana+influxdb+fluentd)までを実行済みのdockerファイルはこちら
  • 第1章〜第4章まで全てを実行するための実行コードはこちら
10
12
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
10
12