Mackerel

【Mackerel】監視対象ホストからMackerelにデータが届かない時!

はじめに

こんにちは、映画『TENET』をみましたが、インテリジェンスで脳みそ震える傑作でしたね。毎度シビれます。Blu-ray出たら何度も観ます。

ノーラン大好きエンジニア森屋でございます!

前回の記事にて軽く触れましたが、この前までMackerelにちゃんと届いていたはずのデータが、急に届かなくなっちゃうこと、しばしばありますよね。

ということで今回は、前回の記事で予告したCentOS5からデータが届かない問題を含め、いくつかのパターンをまとてみました。

Mackerelにデータが届かない時!

監視ホストにインストールされたルート証明書が古い

さっそく予告した件です。

api.mackerelio.com の証明書更新作業を実施します - Mackerel ブログ #mackerelio

コチラで触れられている話ですね。私が監視している環境では、9/23からデータが届かなくなってしまいました。

ログには以下のエラーが出てました。

YYYY/MM/DD HH:MM:SS WARNING <command> Get https://api.mackerelio.com/api/v0/hosts/XXXXXXXXXXX: x509: certificate signed by unknown authority

CentOS6以上でであれば yum update 等で問題ないです。ここで読み止めてください。

しかし、CentOS5環境だったらどうでしょうか?

OSコミュニティのサポートが終了しているため、 yum update を実行しても最新のルート証明書はインストールされません。

仮にvaultリポジトリを使っても、あくまでCentOS5で提供されていた最終のものが入るだけです。
今回更新された api.mackerelio.com の証明書は、2019年に更新された新しいルート証明書を参照するため、アップデートで入るものではありませんでした。

執筆時点(2020/10)の証明書情報を確認すると、「Cybertrust Japan SureServer CA G4」を使っている様子です。

最新のルート証明書を取りにいって、手動でサーバにインストールしましょう!

https://www.cybertrust.ne.jp/sureserver/download/root_ca/scrca2.txt
をPC等にダウンロード
※https://www.cybertrust.ne.jp/sureserver/support/download_ca.html
 ページ内検索で「Cybertrust Japan SureServer CA G4」を検索すると見つかる、ルート証明書データのURLです

監視ホストにアップロード
※viで手書きしたり、SCP等でアップロード

openssl x509 -text -in scrca2.txt
--------------------------------------------------
このあと使うので、クリップボードにコピーしておく
--------------------------------------------------

cp -p /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt_`date +'%Y%m%d'`

vi -c "set paste" /etc/pki/tls/certs/ca-bundle.crt
--------------------------------------------------
最下行に、先のopensslコマンドの結果をペースト
--------------------------------------------------

/etc/init.d/mackerel-agent start

tail /var/log/mackerel-agent.log
※例のエラーが出なくなり、またMackerelに監視データが到達していることを確認

TLSのバージョンが適さない

実際遭遇したことはないのですが、起こり得るので書いておきます。

api.mackerelio.comは、以下の通り一部のTLSバージョンしか許可していません。

私ら界隈では有名なのですが、世界的な動きとして、脆弱な暗号通信をどんどん排して(廃して)いく動きがあります。

その中で、セキュア通信に用いられるSSLやTLSと呼ばれるプロトコルの古いバージョンが排されています。

当面は、TLSのバージョン1.2以上に寄せてってますね。

Mackerelでは、mackerel-agentがうまいことしてくれているらしく、今のところは古いサーバでもAPIサーバにデータが届けられる様になっています。

しかし、今後起きた場合は、opensslのバージョンアップ等が必要になるかもしれません。

インターネットへ出るインターフェースが無い

Mackerelの監視は基本的に、mackerel-agentから api.mackerelio.com へのHTTPS通信によるデータ投げ込みです。

監視ホストがグローバル通信を行えない場合は、Mackerelへデータが到達せず、監視不可能となります。

などの対策が挙げられます。

443ポートへのアウトバウンド通信が制限されている

ひとつ前のグローバル通信ができないケースと似てますが、443ポートが制限されている場合も起こり得ます。

対策も同じような感じです。

エージェントが起動していない

単純に起動し忘れているケースもありますが、異常動作時にmackerel-agentが勝手に停止することがあります。

初回起動時に一意のIDを監視ホストとMackerelサーバ間で取り決めていますが、通信異常等や先の症状でそのやり取りを行えなかった場合、一定時間の後に異常停止することを確認しています。

そんなときは、原因を取り除き、再起動してあげましょう。

/var/log/mackerel-agent.log
journalctl -u mackerel-agent.service
などの情報が助けになるかもしれません。

ただし、上記ケースでは /var/lock/subsys/mackerel-agent というファイルが残りっぱなしで正常停止できてない状態になります。

rmコマンドで削除してから、起動しましょう。

障害が起こっている

  • 監視ホスト側に障害が発生し、mackerel-agentが正常に動作しない/Mackerelへデータが送れない
  • Mackerel側に障害が発生し、データが送れない
    Mackerel Status をチェック

ホストステータスを変更している

working … 監視○/通知○
standby … 監視○/通知×
maintenance … 監視×/通知×
poweroff … 監視×/通知×

とステータス設定がありますが、問題が"通知が来ない"ということでしたら、このケースが当てはまるかもしれません。

ただし、Mackerel上でステータスを変更しようが、mackerel-agentによる情報収集、および監視ホストから api.mackerelio.com へのデータ送信は止まらないため、厳密にはデータが届かない事象は引き起こしません。

うっかり退役させた

Hostsの画面最下部に、「退役ホストをみる」というリンクがあります。そちらで確認しましょう。

改めてホストとして認識させるならば、/var/lib/mackerel-agent/id を削除した上でmackerel-agentを再起動させましょう。

新たにidファイルが作成されたならば、成功です。

プラン上限を超えている

超過項目は見えないので、プランをアップグレードしましょう。

おわりに

他にもケースはあると思います。

記事を書いておいてなんですが、Mackerelサポートの方はすごく親切に回答してくれるので、基本的には問い合わせてみましょう!

問合せ障壁が低い点も、Mackerelの良いところです。

最後になって、いつもここから 的なタイトルなことに気づきました。

そろそろ夕日が沈むので、終わります。ではまた!