$30 off During Our Annual Pro Sale. View Details »

Mackerelを触り始めて2年経ったので 作ってきたプラグインを振り返る

ryuichi1208
July 11, 2023
1.9k

Mackerelを触り始めて2年経ったので 作ってきたプラグインを振り返る

ryuichi1208

July 11, 2023
Tweet

Transcript

  1. 技術部プラットフォームグループ 2021年 中途入社 2 自己紹介 渡部 龍一 Watanabe Ryuichi •

    ロール: SRE • 仙台から来ました • Mackerel歴: 2年 • 好きな公式プラグイン: mackerel-plugin-gearmand • Twitter : @ryuichi_1208
  2. 4

  3. • サービス数: 25 • ホスト数: 840+ • VM + コンテナ

    • 監視ルール: 300+ • プラグインの利用数: 60+ • 用途 • メトリクス、自動化ツール、SLIの計測 • 自宅サーバの監視 i. アラートはLINEに通知して鳴っても放置してる 5
  4. • メトリックプラグイン(24個) • mackerel-plugin-linux-netstat • mackerel-plugin-sslhandshake-time • mackerel-plugin-linux-meminfo • mackerel-low-usage-police

    • mackerel-plugin-mysql-extend • mackerel-plugin-axslog-light • mackerel-plugin-dns-healthcheck • mackerel-errorbudget-calculator • mackerel-plugin-dns-lookup • mackerel-plugin-linux-virt-mem • mackerel-plugin-linux-tcp-memory • mackerel-plugin-linux-socket-queue-size • チェックプラグイン(8個) • check-ddos-udp • check-dos-tls12 • check-ssl-validate • check-mysql-backup • go-check-virtmem • go-check-longtransaction-cnt 7
  5. • メトリックプラグイン(24個) • mackerel-plugin-linux-netstat • mackerel-plugin-sslhandshake-time • mackerel-plugin-linux-meminfo • mackerel-low-usage-police

    • mackerel-plugin-mysql-extend • mackerel-plugin-axslog-light • mackerel-plugin-dns-healthcheck • mackerel-errorbudget-calculator • mackerel-plugin-dns-lookup • mackerel-plugin-linux-virt-mem • mackerel-plugin-linux-tcp-memory • mackerel-plugin-linux-socket-queue-size • チェックプラグイン(8個) • check-ddos-udp • check-dos-tls12 • check-ssl-validate • check-mysql-backup • go-check-virtmem • go-check-longtransaction-cnt 8
  6. • ryuichi1208/go-check-longtransaction-cnt • MySQLのロングトランザクションの数を監視するチェックプラグイン • 大容量のUNDO(rollback)セグメントを消費することによる BufferPool荒れを防ぎたく て作った i. 分析クエリの発行が1トランザクションで実行されていたりして

    3日かかるようなク エリがあった ii. 閉じ忘れられるトランザクションとかにも有効 • INFORMATION_SCHEMA INNODB_TRX テーブルあたりをパースして実装 • 検出後はクエリを出して開発者へフィードバックとか 9
  7. • ryuichi1208/mackerel-plugin-linux-socket-queue-size • 指定したポートの listen-queue と accept-queue の数を出力するプラグイン • /proc/net/tcpをパースして実装

    • nginxでSSL終端をしているサービスでnginxでの処理時間が伸びているという事象 が発生していた • 当時はこの時間をリアルタイムに監視する術がなかった • nginxで処理が詰まっていることをアラートとして出すために作成 i. nginxのスレッドがなんらかの原因で詰まると accept(2)の呼び出しが行われな いため増える ii. この数値をトリガーとしてnginx自体のオートスケール処理 10
  8. • ryuichi1208/mackerel-plugin-sslhandshake-time • 指定されたURLへhttpsリクエストをして”名前解決”、”tcp接続”、”SSLハンドシェイク” のそれぞれを計測するメトリクスプラグイン • httptrace.ClientTraceの各処理にフックを入れて計測処理を実装 • DNSはPowerDNSを使っていたり、OpenStack Load-balancing

    サービス の Octavia自分たちで運用していたりSSLの部分はngx_mrubyを使った動的証明書の 仕組みを実装していたり • 外形監視のアラートがなった際の調査の範囲を狭めるために作成 i. DNSなのかLBなのかSSL処理部分が悪いのかをある程度短時間で判断できる 仕組み 11
  9. • ryuichi1208/mackerel-plugin-linux-virt-mem • Linuxの仮想メモリの上限と現在使用量を出力するメトリクスプラグイン • /proc/meminfoをパースして実装 • MySQLがメモリ使用量(RSS)は多くないのにOOMが発生していたケースがあって実 装 i.

    仮想メモリの不足が原因 • /proc/sys/vm/overcommit_memoryを1で運用(厳格なオーバーコミット管理) i. 夜中に仮想メモリをめっちゃ使用しているグラフがわかった ii. プラグインも結構使用していることがわかった iii. 参考) Why does my Go process use so much virtual memory? 12