ハードウェアからサーバ・アプリまでワンストップで開発

システムの監視にZabbixを使っているところは多いと思います。

他方、Zabbixは機能が豊富過ぎていたり、サーバがPHPなので「hackするにはちょっと」とかで躊躇する人は少なくないと思います。だいたい同じようなことはSNMPでも出来たりするので、その辺も「いじりたい欲」のある人には厳しいかも知れません。

そこで、Zabbix agentを直接Rubyから叩いて、いろいろいじれると楽しいかなと思っていじってみました。

プロトコル

Zabbix agentのプロトコルは独自のTCPプロトコルなのですが、内容はごく単純で、

  • ヘッダー + key文字列

を送信して、key文字列が示すオブジェクトの値を

  • ヘッダー + 内容

という形式で返して来るだけです。送信のヘッダーの中身は、

"ZBXD0x1" + key文字列の長さ

です。受信ヘッダーの内容も同じです。

TCPのポートは10050です。

Rubyコード

これをコードにすると、

def query(key)
  ret = nil
  begin
    TCPSocket.open(AGENT_HOST, AGENT_PORT) do | agent |
      send = ['ZBXD', 1, key.length].pack('a4CQ') + key
      agent.write(send)
      got = agent.read
      if ( got )
        a = got[0..13].unpack('a4CQ')
        ret = got[13..-1].unpack("a#{a[2]}")[0]
      end
    end
  rescue
    ;
  end
  ret
end

という感じになります。このkeyの値は、

4 アイテム

のあたりを見ると、なんとなくわかります。

弊社での応用

弊社では、必要なアイテムの値を取得して、Follogerにデータを送ってグラフ化しています。

こんな感じです。

なお、Zabbix agentからデータを取得してFollogerに投げるためのコードの全体は、

/folloger-libs

にありますので、参考にしてみて下さい。

応用

今はグラフを描くだけでしかありませんが、いずれIFTTTと連携してあれこれやりたいなと思っています(今作業中です)。つまり、Zabbixで出来ていることを、Zabbixサーバを使わずに実現しようと思っています。なんでわざわざこういったことをするかと言えば、それはまぁFollogerの可能性を見せるという意味もありますが、ZabbixをZabbixに閉じた世界にするのではなくて、

インターネット的

に使うことで、可能性が拡がるのではないかなぁと思ってのことです。たとえば、

  • どこかとコンサル契約してリソースの情報を提供する
  • 他のサーバの負荷の推移と比較してみる
  • 「アラート」の方法を多様化させる

というようなことを、Zabbixに直接手を入れることなく行えるようになりますね。こういった可能性を探ってみるのも面白いんじゃないかと思ってます。

最近のエントリー

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル