Tech Sketch Bucket of Technical Chips by TIS Inc.

fluentd+influxdb+Grafanaでsnmpwalkの結果をグラフにしてみた

Pocket

ITmedia @ITでOSS運用監視製品の比較記事の執筆をさせて頂いた。
その際にfluentd+influxdb+Grafanaを利用してsnmpwalkで取得したリソース使用量の測定値をグラフ化する検証を実施した。
その構築手順について以下にまとめる。

インストールの為に以下のサイトを参考とさせて頂いている。
iij/fluent-plugin-snmp
tarom/fluent-plugin-typecast
Dstat + Fluentd + Influxdb + Grafana(Qiita/akito1986氏)
fluentd(td-agent)のインストールと設定

検証に使用した環境

検証に使用した環境は以下となる。


VMware ESXiに上にCentOS 7.2 (minimal install)とUbuntu Server 15.10LTSをインストールしている。インストール後にntpを手動インストール+自動起動だけ行った状態となっている。

CentOS 7.2 へのインストール

snmpのインストール

1.インストール済パッケージのupdate
$ sudo yum update -y

2.snmp/snmp-utilsのインストール
$ sudo yum install -y net-snmp net-snmp-utils

3.snmpdの設定ファイルの編集
$ sudo vi /etc/snmp/snmpd.conf

com2sec mynetworkのIPアドレスレンジは使用するIPで変更が必要
localhostからしかアクセスしない場合はmynetwork自体の設定が不要

4.snmpdの起動と自動起動の設定
$ sudo systemctl start snmpd
$ sudo systemctl enable snmpd

5.snmpwalkの実行結果の確認
$ sudo snmpwalk -c public -v 2c localhost
※3000行くらい出力されるはず。

fluentdのインストール


1.rubyの実行・ビルド環境のインストール
$ sudo yum install -y gcc ruby ruby-devel

2.fluentdのインストール
$ sudo gem install fluentd

3.fluent-plugin-snmpのインストール
$ sudo fluent-gem install fluent-plugin-snmp

4.fluentdでsnmpwalkのMemory/Diskの使用量を取得する設定ファイルを作成
※設定ファイル類は/etc/fluentdに格納するようにしている。
$ sudo vi /etc/fluentd/fluentd_snmp_mem_disk_used.conf

取得結果を標準出力に表示する設定となっている。

5.snmpwalkから必要データを抽出するrubyスクリプトを作成
$ sudo vi /etc/fluentd/fluentd_snmp_mem_disk_used_exec.rb

snmpwalkからhrStorageDescr/hrStorageSize/hrStorageUsedの値を抽出している。

6.作成した設定、Rubyスクリプトを実行してみる
$ sudo fluentd -c /etc/fluentd/fluentd_snmp_mem_disk_used.conf

取得結果が表示される。ただしリソース値が文字列として取得されいてるため、このままでは数値として利用できない。

7.文字列データを数値に変換するfluent-plugin-typecastのインストール
$ sudo fluent-gem install fluent-plugin-typecast

8.設定ファイルの取得結果部分を文字列→数値に変換するように修正
$ sudo vi /etc/fluentd/fluentd_snmp_mem_disk_used.conf

9.作成した設定、Rubyスクリプトを実行してみる
$ sudo fluentd -c /etc/fluentd/fluentd_snmp_mem_disk_used.conf

取得結果が表示される。今度はリソース値が数値に変換されている。

influxdbのインストール


1.influxdbのリポジトリをyum.reposに追加
$ sudo vi /etc/yum.repos.d/influxdb.repo

2.influxdbをインストール
$ sudo yum install -y influxdb

3.influxdbの起動と自動起動の設定
$ sudo systemctl start influxdb
$ sudo systemctl enable influxdb

4.influxdbに測定結果を格納するDBを作成
database名は"monitor"で作成。
$ sudo influx
> create database monitor
> exit

fluentdの取得結果をinfluxdbに記録する

1.fluent-plugin-influxdbのインストール
$ sudo fluent-gem install fluent-plugin-influxdb

2.設定ファイルに取得結果を標準出力→influxdbに保存するように変更

3.作成した設定、Rubyスクリプトを実行してみる
取得結果は出力されいないので1分くらい動作させて止める。
$ sudo fluentd -c /etc/fluentd/fluentd_snmp_mem_disk_used.conf

4.influxdbの登録内容を確認
$sudo influx
> use monitor
> select * from influx

以下のような結果が記録されている。

5.補足 influxdbのコマンド
※プロンプトで"help"を入力すると基本的なコマンドの一覧が参照できる。

(1)database名取得

(2) tag Key参照

(3) field keys参照

Grafanaのインストール


1.最新のインストールパッケージの確認
GrafanaのDocumentationの
installationに最新パッケージのURLが記載されている。
'2016/4現在の最新のstableバージョンはVer 2.6.0.1

2.必要パッケージのインストール
$ sudo yum install -y initscripts fontconfig

3.Grafana本体のインストール
$sudo yum install -y https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0-1.x86_64.rpm

4.Grafanaの起動と自動起動の設定
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server

5.Grafanaとinfluxdbの接続ポートのfirewallを解放
$ sudo firewall-cmd --add-port=3000/tcp --zone=public --permanent
$ sudo firewall-cmd --add-port=8086/tcp --zone=public --permanent
$ sudo firewall-cmd --reload

6.Grafanaの管理画面に接続
http://[ip address]:3000/で管理画面に接続できる。
初期状態のログインはuser id=admin/password=adminである。

Grafanaの設定

1.Grafanaからinfluxdbに接続
influxdb接続のユーザID、パスワードは設定していないので、root/適当な文字列で接続できる。

2."/"の空き容量のグラフ生成
snmpdのディスク容量はblock=4096byte単位なので4倍にしてKB単位をベースとしてグラフを生成する。

3.作成したグラフをDashboardに表示

Ubuntu 15.10へのインストール

fluentdのインストール準備

fluentd公式サイトのInstalling Fluentd Using deb Packageではtd-agentのインストールを推奨しているが、あえてfluentdをインストールする。

1.インストール済パッケージの更新
$ sudo apt update -y

2.snmp/syssv-rc-confのインストール
sudo apt-get install -y snmp sysv-rc-conf

3.snmpdの設定ファイルの編集
$ sudo vi /etc/snmp/snmpd.conf

com2sec mynetworkのIPアドレスレンジは使用するIPで変更が必要
localhostからしかアクセスしない場合はmynetwork自体の設定が不要

4.snmpdの起動と自動起動の設定
$ sudo service snmpd start
$ sudo sysv-rc-conf snmpd on

5.snmpwalkの実行結果の確認
$ sudo snmpwalk -c public -v 2c localhost

influxdb clientのインストール

apt-get install -y influxdb-client

fluentdのインストール

1.rubyの実行・ビルド環境のインストール
$ sudo apt-get install -y gcc make ruby ruby-dev

2.fluentdのインストール
$ sudo gem install fluentd

3.fluentdでsnmpwalkの結果を取得する為に必要なpluginをインストール
$ sudo fluent-gem install fluent-plugin-snmp fluent-plugin-influxdb fluent-plugin-typecast

4.fluentdでsnmpwalkの結果を取得する為の設定ファイルとRubyスクリプトを作成
$ sudo mkdir /etc/fluentd

$ vi /etc/fluentd/fluentd_snmp_mem_disk_used.conf

CentOS側の設定ファイルをコピーで問題ないが、influxdbがGrafanaサーバ側になるのでIPアドレスの変更を実施する。

$ sudo vi /etc/fluentd/fluentd_snmp_server2_out_exec.rb

5.作成した設定、Rubyスクリプトを実行してみる
取得結果は出力されいないので1分くらい動作させて止める。
$ sudo fluentd -c /etc/fluentd/fluentd_snmp_mem_disk_used.conf

6.influxdbの登録内容を確認
$sudo influx
> use monitor
> select * from influx

以下のような結果が記録されている。

7.Grafanaの設定
CentOS側と同様なので割愛

8.記録が行われない場合
(1) 記録が行われていない場合は、confファイルの出力先を標準出力に変更してsnmpwalkからの取得が行えているかを確認する。

(2) snmpwalkの結果が取得できた場合は、influxdb-clientが接続できるかを確認する。
$ sudo influx -host 10.255.202.97

(3) 問題が発生した個所で関連する設定を見直す。

エンジニア採用中!私たちと一緒に働いてみませんか?