とーますメモ

Ruby on Rails / Goなどの学習メモ

【Netdata】Ubuntu 18.04上にインストールした時のメモ

Netdata = リアルタイムリソース監視ツール

何が良いかって、リアルタイムの状況がわかるっていうことと
閾値や頻度を適宜設定できるアラート機能が便利。

Netdataの画面を開くとたくさんのセクションがあるが
大事なことはこのセクション毎の説明をしっかり読むこと。結構大事なことが書いてある。

インストール

お決まりのapt installでインストールできるようだったので
以下のページを参考に、インストールしたが、

https://www.howtoforge.com/tutorial/how-to-install-netdata-monitoring-tool-on-ubuntu/

プラグインファイルを編集するedit-configスクリプトが無く、web_logやfail2banなどのコレクター(?)が読み込まれていないようで
想定していた挙動と違う箇所が見受けられることから、最終的に公式と同じようにキックスタートでインストールする方法を使った。
Installation guide | Learn

$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)

これだけで、netdataが起動し、「http://IPアドレス:19999」するだけで良い。

またデフォルトでいろんなコレクターなどの設定がされている。
元設定ファイルがある場所は「/usr/lib/netdata/conf.d」だが、このディレクトリ内のファイルは編集せずに、
「/etc/netdata」内に上書き用の同名ファイルを新規作成し、そこに上書きする。

例1)リソース状態が逼迫したときの通知を設定: health_alarm_notify.conf
cp /usr/lib/netdata/conf.d/health_alarm_notify.conf /etc/netdata/

例2)Fail2banの設定: fail2ban.conf
cp /usr/lib/netdata/conf.d/python.d/fail2ban.conf /etc/netdata/python.d/

※キックスタートスクリプト経由でインストールするとインストールパスが指定できないとのこと。
CentOS7 に netdata をインストールしてリアルタイムでリソース監視する - らくがきちょう

ちなみにアンインストールの方法は以下。
Uninstall Netdata | Learn

$ /usr/libexec/netdata/netdata-uninstaller.sh --yes

Webサーバが既に動作しているサーバにインストールする場合

また自分の場合、Webサービスが動作しているサーバにNetdataを設定したかったため、
そのためのvhost設定を以下のサイトを参考に設定した。
netdata/Running-behind-nginx.md at master · netdata/netdata · GitHub
mastodonが動いているサーバーにnetdataを相乗りさせた際のnginxの設定 - Qiita

ベーシック認証も。
Step 10. Set up a proxy | Learn


通知設定

デフォルトで以下のようなメール通知の設定がされている。

/usr/lib/netdata/conf.d/health_alarm_notify.conf

EMAIL_SENDER=""

# enable/disable sending emails
SEND_EMAIL="YES"

# if a role recipient is not configured, an email will be send to:
DEFAULT_RECIPIENT_EMAIL="root"

メールサーバが入っている場合は、root宛にメールが送られる。
自分の場合はメールサーバを運用せずに、Slackメッセージが送られれば十分のため
メール通知をOFFにし、SlackメッセージをONにする設定を行う。

Slackのincoming WebhookでURLを取得後、SLACK_WEBHOOK_URLにそのURLを設定し、
DEFAULT_RECIPIENT_SLACKにチャンネル名(#は省く)を設定すれば、そのチャンネル宛に通知が届くようになる。

例) netdataチャンネル宛に通知を行う設定
/etc/netdata/health_alarm_notify.conf

# [Email]
SEND_EMAIL='NO'

# [Slack]
SEND_SLACK='YES'
SLACK_WEBHOOK_URL='https://hooks.slack.com/services/xxxx......'
DEFAULT_RECIPIENT_SLACK='netdata'

設定を行った後は再起動。

$ sudo service netdata restart

また以下のコマンドを叩けばテスト通知も行える。

$ sudo su -s /bin/bash netdata
$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test

これでテスト通知が届けば、設定が正しく行われている。

Slack | Learn
Setting up Netdata monitoring with Slack alarms – Arnold Galovics
Email notifications · Issue #3031 · netdata/netdata · GitHub

MySQLのリソース監視

まず、MySQLの監視設定については公式の以下のページを参考にした。
MySQL monitoring with Netdata | Learn

この監視設定を行うには、mysql上でnetdata用のユーザ作成が必須項目として挙げられている。
上記のリンクではパスワードなしのユーザを作成しているが、そもそもしっかりとセキュアな設定をしているMySQLでは
空のパスワードでのユーザ作成は許容されない。

なので以下のリンクやり方に従い、しっかりとしたパスワードでユーザを作成した後、
/etc/netdata/python.d/mysql.confに作成したユーザを設定する。
※ちなみにこのやり方は公式ドキュメントには書いてない!!!(#^ω^)
Integrate netdata monitor (on Linux server)

sql> GRANT USAGE ON *.* TO netdata@localhost IDENTIFIED BY '<password>';
sql> FLUSH PRIVILEGES;

/etc/netdata/python.d/mysql.conf

<任意の名前>:
    user: 'netdata'
    pass: '<password>'

設定後、netdataを再起動すれば「MySQL <任意の名前>」のセクションが表示される。

備考

・保存できるデータはデフォルトだと約2日分まで。

On a system that's collecting 2,000 metrics every second, the database engine's default configuration will store about two day's worth of metrics in RAM and on disk.

・Fail2banで読み込まれているfilterがsshdだけしか表示されないという現象が発生。
以下を参考にし、パーミッション関係かと思ったがそうではなかった。
Centos7 netdata only showing ssh bans and not other 13 filters. · Issue #6184 · netdata/netdata · GitHub

Fail2banプラグインをデバックモードで動かしてみると、jail.localのパースが失敗していた。

$ sudo /usr/libexec/netdata/plugins.d/python.d.plugin fail2ban debug trace

...
2020-04-30 13:03:20: python.d DEBUG: fail2ban[fail2ban] : /etc/fail2ban/jail.local parse failed
...

このプラグインのJailを読み取る正規表現を見てみると(true|false)とあり小文字のみの対応であったが、
自分はTrueまたはFalseと書いていた。それが原因だった。これをtrueとfalseにし、netdataを再起動したところ正常に他のJailsも読み込まれた。

RE_JAILS = re.compile(r'\[([a-zA-Z0-9_-]+)\][^\[\]]+?enabled\s+= (true|false)')

netdata/fail2ban.chart.py at master · netdata/netdata · GitHub