amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

JavaScript の jstree でツリーを書いてみた

目的

SNMP 関連のことをやっていて、いい MIB ブラウザがないか探しています。
アプリ版であれば前回ご紹介した以下の SnmpB があるのですがもっと手軽にみたいなと思い、少し構想を練っています。

amegon.hatenablog.com

イメージとしては以下のような感じです。

  • MIB ツリーをブラウザで表示(インストール不要で手軽)
  • MIB ファイルを後から追加することでツリーの拡張ができる
  • MIB ツリーから対象の SNMP ホストに SNMP-Get、SNMP-Set ができる

一気に全部はできないのと Web 関連のアプリ開発はちんぷんかんぷんなので、一歩ずつ進めていこうかなと思い、今回はブラウザ内にツリー表示をするところまでをやっていきたいと思います。

やったこと

いろいろなサイトを参考に以下のことを実施。

  • jstree をダウンロード
  • ダウンロードした jstree を展開
  • 以下のファイルを一か所に保存
    • まとめるファイル
      • dist\themes\default\32px
      • dist\themes\default\40px
      • dist\themes\default\style.min.css
      • dist\themes\default\throbber.gif
      • dist\jstree.min.js
    • 保存場所
      • <ルートディレクトリ>\js\jstree\

サンプルコードと見た目

<ルートディレクトリ> に sample.html として次項のサンプルコードを作成する。

サンプルコード

ざくっと作成したコードを以下に記載です。
ファイル名を sample.html として以下のコードを張り付けました。
いろいろなサイトを参考にしていたのですが、<script> を置く とか部分的なコードしか載っているところがなかったので、全コード掲載しておきたいと思います。
あとで自分が忘れちゃうから。。

<html lang="ja>
  <head>
    <link rel="stylesheet" href="./js/jstree/style.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="./js/jstree/jstree.min.js"></script>
    <title>jstree サンプル</title>
    <script>
      $(function(){$('#tree1').jstree();});
    </script>
  </head>
  <body>
    <div id="tree1">
    <ul>
      <li>demo1</a></li>
      <li><b>demo2</b>
        <ul>
          <li>demo2-1</li>
          <li><b>demo2-2</b>
            <ul>
              <li>demo2-2-1</li>
              <li>demo2-2-2</li>
            </ul>
          </li>
          <li>demo2-3</li>
        </ul>
      </li>
      <li>demo3</li>
      <li>demo4</li>
      <li><b>demo5</b>
        <ul>
          <li>demo5-1</li>
          <li>demo5-2</li>
          <li>demo5-3</li>
          <li>demo5-4</li>
          <li>demo5-5</li>
        </ul>
      </li>
    </ul>
    </div>
  </body>
</html>

実行結果

sample.html をブラウザで開くと以下みたいに表示されました。
子ノードがあるノードは太字で表示しているので、太字のノードをダブルクリックするとツリーが展開されて子ノードが見れました。

はまったこと

前述したようにサンプルとしての全コードを掲載している参考サイト見つけることができず、途中から自分でトライエラーを繰り返しました。
結果一番はまったのは 内の <link><script> の記載順序でした。
はじめは <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><head> 直下に記載していたのですが 「Uncaught ReferenceError: jQuery is not defined」でうまく動かず。。

思考錯誤した結果、サンプル通り <link rel="stylesheet" href="./js/jstree/style.min.css"> を先頭にしたらうまく動作しました。なんで??

今後

このツリー表示機能を参考にして、念願の MIB ツリーを作成していきたいと思います。
いつできるかな。。。

Miracle Linux 8 に snmposter をインストールする ansible playbook を作った

playbook を作成した経緯

最近技術的なこともやっていなかったので、リハビリがてら ansible の playbook を書いてみた。
前回の記事で書いた snmposter のインストールを実施する ansible の playbook を作成してみた。
そんなに何回も使用するものでもなさそうですが、よかったら使ってみてください。

前回の記事

amegon.hatenablog.com

Playbook

github.com

MiracleLinux 8 に snmposter をインストール & 実行

きっかけ

自身の snmposter 環境が CentOS 7 で稼働しているので、そろそろ新しいバージョンの RHEL OS に移行しようとかと思いトライしてみた。

結果

  • MiracleLinux 8 で snmposter を動かすことができた
  • 試しに同じ手順を MiracleLinux 9 に対して実行してみたが、snmposter はインストールできなかった
    • というか python2 がインストールできなった
    • RHEL9 系で snmposter を動作させるには python3 対応が必要かも
  • インストールが完了すれば、起動・停止の手順は過去と同じだった。手順は過去記事を参照する形式にした。
    • 過去記事:

amegon.hatenablog.com

インストール手順

必要モジュールのインストール

yum -y install python2-devel gcc wget tar

仮想環境の作成

pip2 install virtualenv
virtualenv /snmposter

仮想環境の有効化

source /snmposter/bin/activate

必要モジュール TwistedSNMP のインストール

wget http://downloads.sourceforge.net/project/twistedsnmp/twistedsnmp/0.3.13/TwistedSNMP-0.3.13.tar.gz
tar -xzf TwistedSNMP-0.3.13.tar.gz
cd TwistedSNMP-0.3.13
python2 setup.py install
cd ..

必要モジュール pysnmp-se のインストール

wget http://downloads.sourceforge.net/project/twistedsnmp/pysnmp-se/3.5.2/pysnmp-se-3.5.2.tar.gz
tar -xzf pysnmp-se-3.5.2.tar.gz
cd pysnmp-se-3.5.2
python2 setup.py install
cd ..

snmposter のインストール

pip2 install snmposter

snmposter実行用ファイルの準備

以下の記事を参照。

snmposterを使ってみる - amegonの雑なブログ

snmposter の実行

以下の記事を参照。

snmposterを使ってみる - amegonの雑なブログ

停止手順

以下の記事を参照。

snmposterを使ってみる - amegonの雑なブログ

注意事項

以下の記事を参照。

snmposterを使ってみる - amegonの雑なブログ

備考

実行ログは時間があったら掲載します。。

ダッシュボード作成 by Zabbix 6.0

きっかけ

Zabbix Conference 2023 を見ていてマップコンテストがダッシュボードコンテストに変わっていることを知る。
自分だったら何を作れるかなぁ、と考えているうちに作り始めていた。

作成するダッシュボードの企画

以前から頭痛に悩まされていて Zabbix で気圧の監視を始めていた。
もともとトリガーで気圧の変動時に障害検知とする設定は作っていた。
これをダッシュボードでさっと確認するにはどんな要素がいるかなと考えた。

  • 現在障害発生中かどうか
    • 障害 = 今後頭痛が発生する可能性が高い ということになるので、まず障害状態を知りたい
  • 現在時刻の確認
    • このあとの気圧の推移を知るためにも、現在時刻を知りたい
  • 今後の気圧の推移はどうなっているか
    • 今後障害は発生する、もしくは発生し続けるのかを把握したい

できたダッシュボード

以下のものができました。

ダッシュボード全体図

構成要素と表示内容

  • 日本時間
  • 気圧変動予報
    • マップで作製したものを表示
    • 気圧の変動アラートが発生しているかいないかをイメージで表示
  • 気圧予報グラフ(現在から12時間後)

    • グラフウィジェットを使用
    • 気圧の予報情報は OpenWetherMap から API で取得
    • 取得したデータは未来の時間情報で Zabbix に記録
    • グラフウィジェットでは (現在時間-2h) ~ (24時間先の未来) までを表示固定
    • Zabbix 6.0 から表示期間の未来固定化がすばらしい(個人的感想)
  • 気圧変動アラート(現在から未来12時間の間で5hPaの変動を検知した場合)

おまけ

気圧変動アラートが発生した際には Slack にも通知を行って気づけるようにした。

    • (Slack に送信している気圧のグラフは Python で作成したものを使用してます)

Zabbix のマップでネットワーク機器の前面状態を作成してみた(しかしイマイチ..)

きっかけ

Zabbix のマップをいじっているうちに、ネットワーク機器の前面パネルを表示してポートの状態が正常と障害で表示が切り替えられそうだな、と思った。
いろいろなベンダーで同様の機能が提供されているか、それを Zabbix だけで実行できるのではと思った次第。

作り方

以下に抜粋。

ホストの作成

以下のようにしてホストを作成。

  • ネットワーク機器のポートごとにホストを作成
  • ホストにはアイテム1つとトリガー1つを作成
  • トリガーは ifOperStatus が 1 以外だったら障害、それ以外(=1)だったら復旧 とした

アイコンの作成

ネットワーク機器前面の絵

ネットワーク機器の前面パネルの絵を準備。
今回はアライドテレシスの AT-x210-9GT を使用。
理由は同機器を所有しているからと絵の入手が簡単だったから。
絵は以下のサイトからダウンロードして加工した。

https://www.allied-telesis.co.jp/library/parts/switch/dcycle.html

ポート状態表示用の絵

正常時、障害時、メンテナンス時の絵を以下のように準備した。
上下それぞれのポートに対して準備をする。

  • 正常時
  • 障害時
  • メンテナンス時

マップの作成

Zabbix で以下のようにマップを作成

  • ネットワーク機器前面の絵を配置
  • ポート状態の 正常時 の絵を用いて、ポートごとに作成したホストと紐づけ設定を行う
    • この作業をポート数分繰りかえす
  • ネットワーク機器前面の絵のポートの上に、上記で作成したポート(ホストとひもづけ済)をのせる

    • この作業をポート数分繰りかえす
  • 作成過程のスクショ

  • 出来上がり

監視を実施

以下の状態で監視されているネットワーク機器をマップで表示してみた。

  • ポート 1-3 はリンクアップ
  • ポート 4-8 はリンクダウン

結果

正常時にはポートが緑色表示、障害時にはポートが赤色表示となりわかりやすいと感じた。
しかし、障害時には何かしら障害の情報が表示されてしまいそちらに目がいってしまい表示が汚くなる印象を受けた。

障害時に表示するメッセージの種類をもう少しカスタマイズすることができたら利用価値があるかもしれない。
今回はそれがわかったことがOKとして、また別の機会があったら表示上のカスタマイズをすすめてみようと思ったり思わなかったり。

Android に Zabbix Agent をインストール(非公式)

概要

  • Android で以下のアプリを発見したので入れてみました。
  • Zabbix サーバーで使用するテンプレートも準備してみました。

Android に Unofficial Zabbix Agent のインストール

以前 Android 12L を適用した Nexus 7 に以下をインストールした。

play.google.com

特にインストールは困らず。

インストール後、Android にインストールしたエージェントに Zabbix サーバーの IP アドレスを設定して起動した。

Zabbix 用監視テンプレート

以下に作成したものを保存しました。
一部監視データの取得が未確認なものも含んでいます。
(通信キャリアの情報など。私の Nexus 7Wifi のみモデルのため確認できず。。)
うまく使ってください。

github.com

監視データの取得具合

以下のような感じ。

Zabbix から Slack への通知

はじめに

以前 Zabbix から Slack へアラート通知する設定をしてから時間がたっていたことで、Slack の api ページが若干表示が変更になっていたことと、前回の設定のメモがあまりにもいまいちだったので再設定を兼ねて設定方法をメモしました。

大きな流れ

  • Slack の api 機能で bot を作成
  • Slack ワークスペースで通知先チャンネルの設定
  • Zabbix のメディアタイプ設定
    • この時 slack で作成した bot の情報をパラメータとして設定
  • Zabbix のアクション設定で上記のメディアタイプを指定

Slack apibot の作成

以下の URL にアクセス

https://api.slack.com/

表示された画面で Your apps を選択

表示された画面で Create New App ボタンを選択

表示された画面で From Scratch を選択

表示された画面で以下の情報を入力・選択して Create App ボタンを押す

  • App Name
    • App の名前。任意でOK。
  • Pick a workspace to develop your app in:
    • App を使用する workspace を選択する。

以下の画面に遷移したら OAuth & Permission を選択

遷移した画面で中断まで画面をスクロールし、Scopes 内の Add an OAuth Scope ボタンを押す

表示された選択肢から chat:write を選択

chat:write が追加されたことを確認する

画面を上部にスクロールし、OAuth Tokens for Your Workspace 内の Install to Workspace ボタンを押す

アクセス許可の画面が表示されるので 許可する を選択

画面が戻ってくると OAuth Tokens for Your Workspace 内の Bot User OAuth Token に Token が表示されているのでメモっておく

Slack ワークスペースで通知先チャンネルの設定

Slack ワークスペースの App に、先ほど作成した botSlack Notification from Zabbix が表示されていることを確認

次に Zabbix からの通知を受け取りチャンネルを作成する
ここでは #zabbix_alert として作成

チャンネルを選択して右クリック → チャンネル詳細を表示する を選択する

表示された画面で インテグレーション を選択し App 内の アプリを追加する を選択する

表示された画面で、前項で作成した bot Slack Notification from Zabbix追加 ボタンを押す

Zabbix のメディアタイプ設定

Zabbix にログインして 管理 → メディアタイプを選択し、その中の Slack を選択

オリジナルの設定は残しておきたいので、画面最下部に移動して 複製 を選択

複製したメディアタイプで以下の項目の設定を更新して保存する

項目 設定内容 設定例
名前 任意 Slack_Zabbix_Alert
bot_token Slack api で生成された Bot User OAuth Token -
zabbix_url 自身の Zabbix サーバーの URL http://192.168.1.1/zabbix

次にテスト実行してみる。
この際以下を変更して テスト ボタンを押す。

  • channel:zabbix_alert
  • event_id:1
  • event_nseverity:0
  • event_source:0

Slack 側で受信できたことを確認

Zabbix のアクション設定で上記のメディアタイプを指定

管理 → ユーザー で通知を実施するユーザーを選択

メディア を選択して以下のように設定

設定 → アクション で Slack に通知したいアクション設定に対して、先ほど作成したユーザーのメディアを選択して設定する