InfluxDBを利用し、Grafanaのグラフ描写を高速化!!

以下記事にて、ZabbixとGrafanaを組み合わせて、グラフィカルなダッシュボードを描写する方法をご紹介しました。

Zabbixの監視情報をGrafanaでグラフィカルなダッシュボードにしてみた

しかし、上記記事の構成でGrafanaからグラフ描写すると、若干ですが描写に時間がかかっている気がしてストレスを感じました。そこで今回は、ZabbixとGrafanaの間に監視情報と相性のよい時系列データベース「InfluxDB」を構築し、Grafanaからの監視情報要求先をInfluxDBが受け持つことで、Grafanaのグラフ描写を高速化したいと思います。

Grafanaは標準でInfluxDBとの情報連携に対応していますが、ZabbixとInfluxDBとの情報連携には、「influxdb-zabbix」というオープンソフトウェアを利用します。
では早速、構築を始めてみましょう。

前提

Zabbix及びGrafanaは既に構築済とします。
influxdb-zabbixの制約として、現(2017年5月)時点ではPostgreSQL版のZabbixのみ対応しています。

構築

以降はroot権限での操作を想定し、SELinuxは無効化にしています。

InfluxDB構築

InfluxDBのインストール及び初期設定を実施します。
今回、構築するバージョンは 1.2.2 となります。

# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.2.x86_64.rpm
# sudo yum localinstall influxdb-1.2.2.x86_64.rpm
# systemctl start influxdb

監視情報を格納するデータベースを作成します。

# influx -precision rfc3339
Connected to https://localhost:8086 version 1.2.2
InfluxDB shell version: 1.2.2
> CREATE DATABASE [データベース名]
> SHOW DATABASES
name: databases
name
----
_internal
[データベース名]

InfluxDBではデータベースごとにRetention Policyという機能を用いてデータに期限を持たせ、 期限が切れたデータを自動的に削減することが可能です。要件などにより保存期間が決定している場合に便利です。デフォルトでは無期限となっています。
以下例では保存期間を1年間に設定しています。

> SHOW RETENTION POLICIES ON [データベース名]
name       duration shardGroupDuration replicaN default
----       -------- ------------------ -------- -------
autogen    0s       168h0m0s           1        true
> CREATE RETENTION POLICY [ポリシー名] ON [データベース名] DURATION 365d REPLICATION 1 DEFAULT
> SHOW RETENTION POLICIES ON [データベース名]
name        duration  shardGroupDuration replicaN default
----        --------  ------------------ -------- -------
autogen     0s        168h0m0s           1        false
[ポリシー名] 8760h0m0s 168h0m0s           1        true

Grafana用の連携ユーザを作成します。

> CREATE USER [ユーザ名] WITH PASSWORD '[パスワード]' WITH ALL PRIVILEGES
> GRANT ALL PRIVILEGES TO grafana
> SHOW USERS
user       admin
----       -----
[ユーザ名] true
> exit

Go言語環境構築

influxdb-zabbixはGo言語で開発されているため、Go言語が動作する環境を構築します。

# wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.8.1.linux-amd64.tar.gz

Go言語ツールを利用するための各環境変数を登録します。
また、ワークスペースとして環境変数GOPATHに /opt/go を登録します。

# echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
# echo "export GOPATH=/opt/go" >> /etc/profile
# export PATH=$PATH:/usr/local/go/bin
# export GOPATH=/opt/go

PostgreSQL設定

PostgreSQLのZabbix用データベースに、influxdb-zabbix用の連携ユーザと権限を追加します。

# sudo -u postgres psql -d [データベース名]
# CREATE USER [ユーザ名] WITH PASSWORD '[パスワード]';
# GRANT USAGE ON SCHEMA public TO [ユーザ名];
# GRANT SELECT ON public.history, public.history_uint TO [ユーザ名];
# GRANT SELECT ON public.trends, public.trends_uint TO [ユーザ名];
# GRANT SELECT ON public.applications, public.groups, public.hosts, public.hosts_groups TO [ユーザ名];
# GRANT SELECT ON public.items, public.items_applications TO [ユーザ名];
# \q

influxdb-zabbix構築

influxdb-zabbixをダウンロードし、初期設定を実施します。
ユーザ名やパスワード、データベース名はPostgreSQL設定でした値を入力します。

# go get github.com/zensqlmonitor/influxdb-zabbix
# cp -p /opt/go/src/github.com/zensqlmonitor/influxdb-zabbix/influxdb-zabbix.conf /opt/go/bin/
# vi /opt/go/bin/influxdb-zabbix.conf
address="host=localhost user=[ユーザ名] password=[パスワード] sslmode=disable database=[データベース名]"
filename="influxdb-zabbix.log"
modes="file"

サービスファイルを作成し、influxdb-zabbixを起動します。

# vi /usr/lib/systemd/system/influxdb-zabbix.service
[Unit]
Description=The Influxdb-zabbix Server
After=syslog.target network.target postgresql.service influxdb.service

[Service]
Type=simple
WorkingDirectory=/opt/go/bin
ExecStart=/opt/go/bin/influxdb-zabbix
ExecStop=/bin/kill ${MAINPID}
KillSignal=SIGCONT

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start influxdb-zabbix
# cat /opt/go/bin/influxdb-zabbix.log

ログを確認し、エラーが出力されていないことを確認します。

InfluxDBとZabbixの連携確認

Zabbixの監視アイテムがInfluxDBに格納されていることを確認します。
※Zabbix側で監視アイテムを追加した場合、自動的にInfluxDBにも登録されます。

# influx -precision rfc3339
Connected to https://localhost:8086 version 1.2.2
InfluxDB shell version: 1.2.2
> USE [データベース名]
> SHOW MEASUREMENTS
name: measurements
name
----
Agent ping
Available memory
CPU idle time
~中略~
Zabbix value cache hits
Zabbix value cache misses
Zabbix value cache operating mode
> \q

Grafanaとの連携

WebブラウザからGrafanaのWebUIにアクセスし、InfluxDBを情報取得先として登録します。

・Name:Influxdb (任意)
・Type:Influxdb

■Http settings
・Url:https://localhost:8086
・Access:proxy

■Zabbix API details
・Username:[ユーザ名] (Grafana連携用ユーザ)
・Password:*******
・Trends:Enable

170511131532_001

ダッシュボードには以下例のように登録します。

170511132957_001

select文で書く場合は、以下例の様に入力します。

SELECT "value" FROM "Available memory" WHERE "host_name" = 'Zabbix server' AND $timeFilter

上記を組み合わせることで以下の様な画面を作成できます。

170511154226_001

最後に

今回はInfluxDBを利用して、Grafanaのグラフ描写を高速化する方法をご紹介しました。
感覚的にみてもGrafanaのグラフ表示が非常に高速化していると実感できました。やはり時系列データベースそのものが監視情報の形式に適しているためだと思われます。また、Grafanaからの監視情報要求先をInfluxDBが受け持つことで、Zabbixにかかる負荷も軽減していると考えられます。そういう意味でも十分に導入するメリットは十分あると思いますので、導入を検討してみては如何でしょうか。

サイオステクノロジー株式会社 山田

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です