zabbix¶
zabbixからslackにpostする¶
- incoming-webhook を使う
- slack側でurl取得を行なっておく.
- 方針として,zabbixではmediaを使ってactionでひっかけてtriggerする感じ.
- mediaを登録
- 管理->メディアタイプ
- 名前は適当,タイプはスクリプト,スクリプト名はスクリプトのファイル名.
- scriptはzabbix directoryのalertacripts配下に置く.
/usr/lib/zabbix/alertscripts/slack_notify.sh
- ユーザにmediaを紐づける
- 管理->ユーザ->ユーザ(ユーザグループではない)->メディアタブ
- 通知したいuser(通知用userでもなんでもよい)のmediaに上記mediaを紐づける.
- ここの送信先がスクリプト呼出の第1引数になる.
- actionの設定をする.
- 設定->アクション->アクションの作成
- 名前は適当,
- 件名がスクリプトを呼ぶときの第2引数になる.
- メッセージがまるごとスクリプトを呼ぶときの第3引数になる.
- メッセージに乗っけるマクロの書き方とかはmanual参照
- 実行内容はメッセージの送信で先ほど紐づけたのユーザが含まれるユーザグループや,そのユーザに送信するよう選択.次のメディアのみの使用で登録したmediaを選択.
- その他適切に自由に実行条件等をチューンする.
- もうひとつのやりかたとして,実行内容でリモートコマンドの実行とする手がある.
- mediaを登録
- GitHub - ericoc/zabbix-slack-alertscript: Zabbix AlertScript for Slack.com chat
時刻監視¶
- zabbix3.0でサーバ時刻のズレを監視する(うるう秒対策) - Qiita
- zabのアイテムとして下記を登録.
項目 値
名前 お好みで
タイプ zabbixエージェント
キー system.localtime
データ型 数値(整数)
更新間隔 お好みで
- zabのトリガとして必要に応じて下記を登録
項目 値
名前 お好みで
条件式 {<template_name>:system.localtime.fuzzytime(<diff_threshold>)}=0
深刻度 警告(お好みで)
zabbix-agentにスクリプトを叩かせる.¶
- 下記のような単純な構成のときに,zabbix-agentdに任意のシェルスクリプトを配置して,zabbix-serverで結果を取得したい.
+------------+
| zabbix |
| server |
+------------+
|
|
+------------+
| (zabbix |
| proxy) |
+------------+
|
|
+------------+
| zabbix |
| agentd |
+------------+
/var/lib/zabbix/bin/
配下に実行したいスクリプトを配置する.(別に,ここ配下ではなくてもよい.userparamを書くときにパスを記載する.)
- ex.)
ntpcheck.sh
#!/bin/sh
/usr/sbin/ntpdate -q $1 >/dev/null ; echo $?
- own,permissionはzabbix:zabbix(0755)程度にしておくとよさそう.
/etc/zabbix/zabbix_agentd.d/
配下にUserparamファイルを作成する.
- 用いる機能別にファイルを分けると管理が容易だと考えられる.
- ex.)
/etc/zabbix/zabbix_agentd.d/proxydns.conf
UserParameter=script.ntpcheck,HOME=/var/lib/zabbix /var/lib/zabbix/bin/ntpcheck.sh
- ここで指定した
UserParameter=script.ntpcheck
がzabbix-serverでitem登録する際のkeyとなる. - あとは通常通り,zabbixにてitem登録を実施する.
- ex.)
Name: Proxy DNS
Type: Zabbix Agent
Key: script.ntpcheck
...
zabbix install battle¶
wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
dpkg -i zabbix-release_4.2-1+bionic_all.deb
apt update
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<password>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
Now you are ready to proceed with frontend installation steps which will allow you to access your newly installed Zabbix.
Note that a Zabbix proxy does not have a frontend; it communicates with Zabbix server only.
Agent installation
To install the agent, run
# apt install zabbix-agent
tcp/10050 port あけるとか.
https://www.zabbix.com/documentation/4.2/manual/installation/install_from_packages/debian_ubuntu
https://qiita.com/hirotaka-tajiri/items/fa8a6dbaf1ddf1b59cdd
zabbix templates¶
folum¶
iloの温度¶
## Critical
Title:
System-{#SNMPINDEX}: Temperature is above critical threshold
Problem:
{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()} and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}<>0 or {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{$TEMP_CRIT:"System"} and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}=0
Recovery:
{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}<{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}-3 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}<>0 or {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}<{$TEMP_CRIT:"System"}-3 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}=0
## Warning
Title:
System-{#SNMPINDEX}: Temperature is above warning threshold
Problem:
{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}*0.9 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}<>0 or {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{$TEMP_WARN:"System"}*0.9 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}=0
Recovery:
{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}<{Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}*0.9-3 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}<>0 or {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}<{$TEMP_WARN:"System"}-3 and {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureThreshold.System.{#SNMPINDEX}].last()}=0
## 簡易的には下記
### Critical
Problem: {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{$TEMP_CRIT:"System"}
Recovery: {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].max(5m)}<{$TEMP_CRIT:"System"}-3
### Warning
Problem: {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].avg(5m)}>{$TEMP_WARN:"System"}
Recovery: {Template Server HP iLO SNMPv2:sensor.temp.value[cpqHeTemperatureCelsius.System.{#SNMPINDEX}].max(5m)}<{$TEMP_WARN:"System"}-3
文字列からintegerにして圧縮する¶
- preprocessingを使って,ある固定文字列をstatus num的に変換する
Regular expression:: (.*), \1:No=0:Yes=1:Connecting=2
Regular expression:: (No|Yes|Connecting)(?=.*:\1=(\d)), \2
- これでNoは0に,Yesは1に,Connectingは2にそれぞれ変換される.
- これを使ってvalue mapで再度文字列するとデータ量が抑えられる.
- ref: Getting numeric data from the item value string - ZABBIX Forums