NetData + Graphite + Grafana によるパフォーマンスモニタリング


github.com

NetDataはリアルタイムのパフォーマンスモニタリングツールで長期間のグラフデータを保存しません。 そこで、バックエンドとしてGraphiteを利用してデータを保存してみます。そして、GraphiteのデータはGrafanaを使ってグラフ表示させます。

つまりは、上記URLの図にあるような構成ですが、今回は単一のホストで実現します。


環境

# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 

# ansible --version
ansible 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

インストール

# yum install mariadb-server graphite-web python-carbon MySQL-python

# cat <<EOF >/etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/7/\$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

# yum install grafana
# systemctl deamon-reload

MariaDB,Graphite,Grafanaのパッケージをインストールします。 Grafanaについてはyumのレポジトリを追加しています。

NetDataのインストールについてはこちらを参照してください。

www.instrumedley.net


MariaDBにgraphiteユーザを作成

# systemctl start mariadb.service
# mysql_secure_installation

# mysql -uroot -p
MariaDB [(none)]> CREATE USER 'graphite'@'localhost' IDENTIFIED BY 'graphite';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON graphite.* TO 'graphite'@'localhost';
MariaDB [(none)]> CREATE DATABASE graphite;
MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDBを起動し、graphite用のユーザを登録します。

Graphiteの設定(/etc/graphite-web/local_settings.py)

SECRET_KEY = 'ABCDE_FGHIJ_01234'

TIME_ZONE = 'Asia/Tokyo'

DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'graphite',
        'PASSWORD': 'graphite',
        'HOST': 'localhost',
        'PORT': 3306
    }
}

つづいて、Graphiteの設定です。今回は、"SECRETKEY", "TIME_ZONE", "DATABASES"を編集します。 対象のファイルは、/etc/graphite-web/local_settings.py です。

# /usr/lib/python2.7/site-packages/graphite/manage.py syncdb
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): 
Username (leave blank to use 'root'):
Email address:
Password:
Password (again):

上記コマンドで、データベースを作成します。

graphite-webの設定(/etc/httpd/conf.d/graphite-web.conf)

/etc/httpd/conf.d/graphite-web.confがインストールされています。今回は変更しません。


carbon-cacheの設定(/etc/carbon/storage-schemas.conf)

[netdata]
pattern = ^netdata\.
retentions = 10s:1d,30s:7d,300s:30d,600s:90d

[default_1min_for_1day]
pattern = *
retentions = 60s:1d

次に、carbon-cacheの設定です。carbon-cacheはデータを受け取り、ディスクに保存します。 [netdata]の設定がなくてもcarbon-cacheはデータを保存しますが、ここでは上記の例の通り設定します。1

/etc/carbon/storage-schemas.confの設定は上部から順に有効になります。そのため、[default_1min_for_1day]よりも上に設定を挿入します。


NetDataのバックエンド設定(/opt/netdata/etc/netdata/netdata.conf)

[backend]
        enabled = yes
        data source = average
        type = graphite
        destination = localhost
        prefix = netdata
        hostname = www.example.com
        update every = 10
        buffer on failures = 10
        timeout ms = 20000

NetDataの設定です。規定では"backend"の設定はコメントアウトされています。


サービスの起動

# systemctl start carbon-cache.service
# systemctl start httpd.service
# systemctl restart netdata.service
# systemctl start grafana-server.service

各サービスを起動します。


Grafanaの設定

GrafanaGraphiteのグラフを表示させる設定です。

1. `http://<server>:3000/` にブラウザでアクセスしログイン(初期ユーザとパスワードは admin/admin)
2. "data source"の追加
3. "datshboard"の作成
4. "graph"の追加
Data Sourceの設定

f:id:biaxident:20170302223726p:plain

"Add data source"をクリックします。

f:id:biaxident:20170302223828p:plain

"Name": graphite
"Url": http://localhost/

上記の様に設定し、"Add"をクリックします。

Dashboardの作成

f:id:biaxident:20170302224526p:plain

左上のロゴをクリックし"Dashboards"から"New"を選択します。

Graphの追加

f:id:biaxident:20170302224634p:plain

"Graph"を選択します。その後表示されたグラフの"Panel Title"をクリックして、"Edit"を選択します。

f:id:biaxident:20170302224831p:plain

"Panel data source"の項目から追加したデータソースを選択します。 クエリ("A"の右側の"select metric")をクリックすると"netdata"のプレフィクスが表示されます。以降も同様にして選択し、表示させるグラフを設定します。

"Edit"部分のバツ印をクリックするとダッシュボードに戻ります。グラフを追加し終えたらフロッピーディスクマークをクリックしてダッシュボードを保存できます。


  1. NetDataの設定(“update every”)とcarbon-cacheの設定(“retentions”)を同じにしないと、Graphiteのデータが欠損する可能性があります。