今回はZabbixを活用したブログ第2弾となります。
第1弾ではZabbixと弊社サービスAirManage2を組み合わせた監視について取り上げましたので是非そちらも興味があれば読んでみてください。
第1弾:【質問コーナー】Zabbixを利用してAirManage2のテナント情報監視をするには?
はじめに
2020年頃から始まったコロナ禍により、在宅勤務やテレワークを導入している企業が増えているかと思います。総務省の令和5年の調査によると、半数以上の企業がテレワークを導入しているという結果が出ています。

そこで今回は、テレワーク環境下での勤怠管理について考えてみたいと思います。
具体的には、申請していない残業が発生していないか、退勤申請後に業務を行っていないかなど、勤怠管理のポイントについてです。
すでに取り組んでいる方も多いかと思いますが、まだ取り組んでいない方や既存のシステムを活用したい方にとって、参考になる情報をお届けできればと思います。
また、今回もZabbixサーバーはぷらっとホーム製品OpenBlocks IX9にインストールして使用していますが、インストール部分などは第1弾の記事に記載がありますので第2弾では割愛します。
※ちなみに、今回の記事は弊社の主力製品であるEasyBlocks等に特化した内容ではありません。
ご期待されていた方がいらっしゃれば申し訳ございませんが、次回以降に期待していただきつつ、今回も最後までお付き合いください。
本記事を書いた背景
勤怠管理の課題を解決するために、
IoT分野では例えば、システム・サービスインテグレーター等がBLEビーコン、人感センサー、ネットワークカメラなどを使用した勤怠管理の補助システムを構築するか、専用の有償サービスを利用することが一般的です。
ただし、これらの取り組みには新しいツールの導入や費用の発生、不慣れなシステムの運用に伴う人的コストなど、さまざまなハードルが存在します。

手軽で容易な管理補助システム
今回ご紹介する方法は、すでに多くの企業で導入されている監視ツール「Zabbix」とビジネスチャットツール「Slack」の既存機能だけを活用して、
テレワーク環境下での勤怠管理を補助するシステムを構築することができます。
社内のツールとしてSlackを使用している方ですと見たことある画面かと思いますが、Slackには以下のようにログイン状態がActive | アクティブ、Away | 離席中というのが確認できます。
Active | アクティブ

Away | 離席中

このようにアクティブ時にはアイコンに緑色のステータスランプがつきます。
この情報を使用してテレワーク環境下の勤怠補助ツールとして今回は活用したいと思います。
Slack側で使用する情報
Slack には Slack API という API が提供されており、チャンネルにメッセージを投稿したり、様々なことができます。
今回は API の中に「ユーザーのオンラインステータスを取得する」というメソッドがありますので、それを使います。
実際にZabbixサーバー上からcurlコマンドを使用して情報を取得してみます。

※AuthorizationキーとuserIDはマスク処理しています。
結果表示は
{“ok”:true,”presence”:”active”}ということで、実行結果が正常、ステータスはactiveなので、オンラインということになります。
参考までにオフライン時は以下のようにステータスがawayになります。

Slack APIについての詳細な使用方法等は公式ページなどで確認して下さい。
Zabbix側設定
監視用のスクリプト準備
Zabbixの外部チェック監視で使用するスクリプトを用意します。
スクリプトは/usr/lib/zabbix/externalscripts/以下にslack.shというファイル名で今回は用意します。
また、SlackAPIの結果は「presence」部分にactive又はawayという表示となるため、今回はZabbix側でグラフも使用したいため、サンプルスクリプト内では「presence」部分の結果のみ表示させ、activeを「1」、awayを「0」という値に変換しています。

ホスト作成
ホストの作成から
①ホスト名
②グループを適時
と設定します。今回は以下の通りです。

アイテム作成
アイテムの作成から、
①名前は任意
②タイプを外部チェック
③キーは用意したスクリプトファイル名
④データ側を数値(整数)
⑤監視間隔を10分(任意) とします。

トリガー作成
今回は一例として単純にチェックした際の値が1(オンライン)なら警告で表示させます。
トリガーの作成から①名前は任意、②条件式は判定したい内容の条件式を任意で設定します。

こちらは実際に把握したい内容次第となります。
例えば
・トリガー条件式で30分継続して1(オンライン)ならトリガーを発動させる
・1時間以内に特定回数以上の1(オンライン)があればトリガーを発動させる
・監視除外時間を設けて厳密に管理する
など、トリガー条件式を使用して柔軟に監視設定が可能です。
逆転の発想ですが、オフライン状態を監視して、営業時間中に長時間オフラインが続くとアラートを発報することでサボりかもしれないという状態を監視することもできますが、やりすぎると従業員との信頼関係にヒビが入るかもしれません。バランスを取りましょう。
確認
これまでの設定をした状態で、とある1日分のデータをZabbixのグラフ機能で可視化した場合、以下のように、どのような時間帯がオンライン/オフラインなのか、一目で判別可能です。
これにトリガーで設定した条件と通知設定を組み合わせればより詳細にオンライン/オフラインの確認が可能です。

まとめ
今回は既存ツールを組み合わせて勤怠管理の補助的な役割を持たせるということを試しました。
Zabbixを使用した監視は柔軟性があり、アイデアひとつで様々な監視を実現することが可能です。
※本ブログで紹介したSlackのステータス情報についてですが、オンライン=仕事中、オフライン=離席中ということを保証するものではありませんのでご注意下さい。
<本記事で使用したツールのご紹介>
・監視ツール「Zabbix」
・ビジネスチャットツール「Slack」
・Zabbixサーバー「ぷらっとホーム製品 OpenBlocks IX9」