fluentd+influxDB+Grafanaの導入
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)のコメントアウトが解除されているかどうかをチェックすること。
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」
2.6 Grafanaのフロントエンドにアクセスし、挿入されたデータを表示します。
2.6.1 http://10.0.0.1/grafana/ にアクセスします。
2.6.2 グラフのタイトルをクリックし、Editボタンを押します。
2.6.3 Graph-Metrics->series項目に、「sample」を追加します。
![Grafana - データソースの選択 - シリーズの選択]
2.6.4 グラフが表示されます。
==表示されない場合は、vmのtimezoneの設定や、時刻があっているかどうかを確認すること。こちらを参照==
- 時刻の即時調整は、ホストVM上で下記コマンドを実行
ntpdate clock.nc.fukuoka-u.ac.jp
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章まで全てを実行するための実行コードはこちら
Author And Source
この問題について(fluentd+influxDB+Grafanaの導入), 我々は、より多くの情報をここで見つけました https://qiita.com/soushiy/items/8517e9ea4dd8e8d47b39著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .