記事:
1リクエストの結果に複数の値が入っている場合、リクエスト数を減らしてzabbix側の負荷/DB容量を減らせる。
記事:
curl 127.0.0.1:80/_status Active connections: 10 server accepts handled requests 1234567 1234567 9876543 Reading: 0 Writing: 1 Waiting: 6
zabbix_agentd -t 'web.page.regexp[127.0.0.1,/_status/,80,Active connections: (\w+),,\1]'
記事
デフォルト設定はWeb UIにアクセス人が数十人な設定にみえる。そのためphp-fpmのメモリ消費が多い
sudo vi /etc/php-fpm.d/zabbix.conf -- pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 5 -- sudo service php-fpm restart
記事:
記事:
プロセス毎のopen files, limitsを確認したい場合
sudo -u zabbix which grep /bin/grep
sudo visudo -f /etc/sudoers.d/zabbix -- zabbix ALL=(ALL) NOPASSWD: /bin/ls,/bin/grep --
# number of current opened files by process. Parameter: process.fd[<process name>,<user>] UserParameter=process.fd[*],sudo ls -U1 -A1 /proc/$(pgrep -u "$2" "$1" | head -1)/fd/ | wc -l # value in /proc/<pid>/limits by process. Parameter: process.limits[<process name>,<user>,<limit name>,<column number>] # limit name: Max open files, Max processes, ... # column number: 1=Limit, 2=Soft Limit, 3=Hard Limit, 4=Units UserParameter=process.limits[*],sudo grep -P "$3" /proc/$(pgrep -u "$2" "$1" | head -1)/limits | perl -ne 's/[ ]{2,}/\t/g;s///g;print;' | cut -f$4
sudo -u zabbix zabbix_agentd -t 'process.fd[java,user01]' sudo -u zabbix zabbix_agentd -t 'process.limits[java,user01,Max open files,2]'
記事:
通常は監視の値1つに対して、1回実行が発生する。
1回の実行で複数の値が取れる場合、「-T」で一括送信ができる。外部チェックは負荷が高いので、負荷を下げる事ができるかも。
<hostname> <key> <timestamp> <value> "Linux DB3" db.connections 1429533600 43
zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -k key -o value
# 16進数で32桁。32文字ではない。 openssl rand -hex 32 20684cd0d3ac0ea50f112c4a5aba81696ecf74c77e472002fe54b19f608cb7d9
HostMetadata=Linux WebServer
HostMetadataItem=system.uname
zabbix_agentd -t 'system.uname' system.uname [s|Linux example.localdomain 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64] zabbix_agentd -t 'system.sw.os[]' system.sw.os[] [s|Linux version 3.10.0-693.11.6.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 4 01:06:37 UTC 2018]
zabbix_agentd -t 'system.hostname'
({Example template:system.run[hostname -f].iregexp(web|cache)}=1) and ({Example template:proc.num[ruby,,,td-agent].count(#3,1,lt)}>2)
ホスト単位でざっくりな数を知りたい場合。
# パラメータ化して、zabbix template側で調整する場合。IPv6もパラメータで対応可能 # sockstat[</proc/net/sockstat>,<field name>,<field no>] UserParameter=sockstat[*],grep "$2" "$1" | cut -d' ' -f "$3" # べた書きの場合 UserParameter=sockstat.sockets,grep sockets: /proc/net/sockstat | cut -d' ' -f 3 UserParameter=sockstat.tcp.inuse,grep TCP: /proc/net/sockstat | cut -d' ' -f 3 UserParameter=sockstat.tcp.orphan,grep TCP: /proc/net/sockstat | cut -d' ' -f 5 UserParameter=sockstat.tcp.timewait,grep TCP: /proc/net/sockstat | cut -d' ' -f 7 UserParameter=sockstat.tcp.allocated,grep TCP: /proc/net/sockstat | cut -d' ' -f 9 UserParameter=sockstat.tcp.mem,grep TCP /proc/net/sockstat | cut -d' ' -f 11 UserParameter=sockstat.udp.inuse,grep UDP: /proc/net/sockstat | cut -d' ' -f 3 UserParameter=sockstat.udp.mem,grep UDP: /proc/net/sockstat | cut -d' ' -f 5
# IPv4 # sockstat tcp inuse zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,3]' # sockstat tcp timewait zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,7]' # sockstat tcp alloc zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,9]' # sockstat udp inuse zabbix_agentd -t 'sockstat[/proc/net/sockstat,UDP:,3]' # IPv6 # sockstat6 tcp6 inuse zabbix_agentd -t 'sockstat[/proc/net/sockstat6,TCP6:,3]' # sockstat6 udp6 inuse zabbix_agentd -t 'sockstat[/proc/net/sockstat6,UDP6:,3]'
プロセス単位を知りたければ、
# サマリ ss -s # tcp, プロトコル等を表示 ss -tp # ポート番号からプロセスを調べる sudo lsof -i:<port no>
Zabbix Server/Proxyから実行される。
sudo service zabbix-agent restart tail /var/log/zabbix/zabbix_agentd.log ... ... active check configuration update from [<zabbix-proxy>:10051] started to fail (cannot connect to [[<zabbix-proxy>]:10051]: [4] Interrupted system call)
# zabbix-agent上で nc -v -i 1 -w 3 <zabbix-server or zabbix-proxy> 10051;echo $?
# zabbix-proxy上で nc -v -i 1 -w 3 <zabbix-agent> 10050;echo $?
echo -e "Out of memory\ntest1\ntest2" | grep -E "[O|o]ut of memory|test2" Out of memory test2
#!/bin/bash check_ssl_expire(){ local endpoint=$1 local port=${2:-"443"} local timeout_sec=${3:-"3"} local enddate=$(timeout $timeout_sec openssl s_client -showcerts -connect $endpoint:$port < /dev/null 2>&1 | openssl x509 -enddate 2>/dev/null | perl -ne 'if(/^notAfter=(.+)/){print "$1";}') echo $(( $(( $(date -d "$enddate" +%s) - $(date +%s) )) / 86400 )) } check_ssl_expire "$@"
sudo pip install zabbix-api
sudo service zabbix-server restart
Incoming Webhooks | mention |
<!here> | @here |
<!channel> | @channel |
<@user_id> | @user_id |
attachments_text=$(echo -e "$attachments_text" | tr -d '\r')
sudo chmod 755 /etc/zabbix/alertscripts/*.sh
{ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
payload="{ ... " curl -d "$payload" ...
payload="payload={ ... " curl --data-urlencode "$payload" ...
zabbix_get -s <Agent IP> -k agent.ping 1 tail -f /var/log/zabbix/zabbix_server.log # エラーが無いか確認 tail -f /var/log/zabbix/zabbix_proxy.log # proxyを使用している場合も同様
nc -zv <Server IP> 10051 tail -f /var/log/zabbix/zabbix_agentd.log # エラーが無いか確認
sudo sh -c 'echo "zabbix ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/zabbix' sudo chmod 0440 /etc/sudoers.d/zabbix
※新規インストールする場合は、EPELではなく、Zabbix Official Repository を使った方が3.0へのバージョンアップもできて良い。
いつの頃からかCentOS5.x用のzabbix20のパッケージがEPELから消えてしまった。
しかし、時間の都合でパッチだけ当てたい。検索したところ、fedoraのbuildシステム上にはrpmがあったのでこれをインストールしてみる。
不具合は当然あるものとして自己責任
wget https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-agent-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-debuginfo-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-mysql-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-pgsql-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-sqlite3-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-mysql-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-pgsql-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-mysql-2.0.13-1.el5.x86_64.rpm \ https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-pgsql-2.0.13-1.el5.x86_64.rpm
sudo yum localinstall --nogpgcheck \ zabbix20-2.0.13-1.el5.x86_64.rpm \ zabbix20-agent-2.0.13-1.el5.x86_64.rpm \ zabbix20-server-2.0.13-1.el5.x86_64.rpm \ zabbix20-server-mysql-2.0.13-1.el5.x86_64.rpm \ zabbix20-web-2.0.13-1.el5.x86_64.rpm \ zabbix20-web-mysql-2.0.13-1.el5.x86_64.rpm \ zabbix20-web-pgsql-2.0.13-1.el5.x86_64.rpm sudo service httpd restart
cd ~/ sudo cp /usr/share/zabbix/include/func.inc.php /usr/share/zabbix/include/func.inc.php.2.0.13 cp /usr/share/zabbix/include/func.inc.php ./ wget https://support.zabbix.com/secure/attachment/20605/basename.patch sudo patch < basename.patch patching file: /usr/share/zabbix/include/func.inc.php sudo cp func.inc.php /usr/share/zabbix/include/ sudo service httpd restart
長期間使用しているとDBサイズが肥大化してくる。
特にmysqlのインデックスファイルが大きくなりがち。
innodb_file_per_table=1 innodb_file_format=Barracuda
ls -lh /var/lib/mysql/zabbix/
alter table history ENGINE=INNODB; alter table history_uint ENGINE=INNODB; alter table trends ENGINE=INNODB; alter table trends_uint ENGINE=INNODB;
ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G' 合計 433M -rw-rw---- 1 mysql mysql 64M 1月 15 16:59 history.ibd -rw-rw---- 1 mysql mysql 168M 1月 15 16:59 history_uint.ibd -rw-rw---- 1 mysql mysql 44M 1月 15 16:44 trends.ibd -rw-rw---- 1 mysql mysql 92M 1月 15 16:45 trends_uint.ibd
less /var/log/messages zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends, 33 seconds. zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends_uint, 72 seconds. zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history, 18 seconds. zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history_uint, 47 seconds. ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G' 合計 361M -rw-rw---- 1 mysql mysql 56M 1月 15 17:07 history.ibd -rw-rw---- 1 mysql mysql 124M 1月 15 17:07 history_uint.ibd -rw-rw---- 1 mysql mysql 40M 1月 15 17:02 trends.ibd -rw-rw---- 1 mysql mysql 76M 1月 15 17:03 trends_uint.ibd
less /var/log/messages Jan 15 17:11:43 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends, 17 seconds. Jan 15 17:12:14 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends_uint, 31 seconds. Jan 15 17:13:17 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history, 63 seconds. Jan 15 17:16:38 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history_uint, 201 seconds. ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G' 合計 220M -rw-rw---- 1 mysql mysql 31M 1月 15 17:19 history.ibd -rw-rw---- 1 mysql mysql 64M 1月 15 17:19 history_uint.ibd -rw-rw---- 1 mysql mysql 20M 1月 15 17:11 trends.ibd -rw-rw---- 1 mysql mysql 40M 1月 15 17:12 trends_uint.ibd
wget -O "PhpZabbixApi_Library.tar.bz2" http://zabbixapi.confirm.ch/download.php?file=library tar xvfj PhpZabbixApi_Library.tar.bz2 sudo yum install php php-cli php-pear php-mbstring php apiinfoVersion.php
vim /etc/httpd/conf.d/zabbix.conf ---- php_value date.timezone Asia/Tokyo ---- service httpd restart
vim /etc/php.ini ---- date.timezone = Asia/Tokyo ---- service httpd restart
# 空のパスワードを作成 echo -n "" | md5sum d41d8cd98f00b204e9800998ecf8427e # DBName, DBUser, DBPassword, DBHost を確認 DBName=$(sudo grep -P '^DBName=.+' /etc/zabbix/zabbix_server.conf | cut -d '=' -f2) DBHost=$(sudo grep -P '^DBHost=.+' /etc/zabbix/zabbix_server.conf | cut -d '=' -f2) DBUser=$(sudo grep -P '^DBUser=.+' /etc/zabbix/zabbix_server.conf | cut -d '=' -f2) DBPassword=$(sudo grep -P '^DBPassword=.+' /etc/zabbix/zabbix_server.conf | cut -d '=' -f2) # mysqlに接続 mysql -u $DBUser -p$DBPassword -h $DBHost $DBName # ユーザの確認 mysql> select alias from users; # Adminユーザのパスワードを変更 mysql> update users set passwd = 'd41d8cd98f00b204e9800998ecf8427e' where alias = 'Admin';
echo -e "stats\nquit" | nc 127.0.0.1 11211 | grep 'STAT uptime' | cut -d' ' -f 3 1393
windowsのコマンドプロンプトで以下のようにpowershellを許可しても、zabbix_getからだとエラーが出る
powershell Set-ExecutionPolicy RemoteSigned
UserParameter=example.test,powershell -ExecutionPolicy ByPass C:\zabbix\example.ps1 test
デフォルト3秒なので、実行に時間のかかるアイテムだとタイムアウトする。
server, agentそれぞれに設定がある。ログに出るのでチェック
5011:20140816:164601.847 Zabbix agent item [hdd.smart.discovery] on host [win.example.com] failed: first network error, wait for 15 seconds 5014:20140816:164619.180 Zabbix agent item [hdd.smart.discovery] on host [win.example.com] failed: another network error, wait for 15 seconds
vim /etc/zabbix/zabbix_server.conf ---- Timeout=10 ---- service zabbix-server restart
vim /etc/zabbix/zabbix_agentd.conf ---- Timeout=10 ---- service zabbix-agent restart
HDDやNIC等、1台のPCに同じ種類だが複数台搭載してある機器を自動で取得し、監視に追加できる。
zabbix_agentd -t 'hdd.smart.discovery' zabbix_agentd -t 'hdd.smart[/dev/sda,Power_On_Hours]'
/var/log/zabbix/zabbix_java_gateway.log { missingok notifempty compress copytruncate create 0664 zabbix zabbix su zabbix zabbix }
log[]やlogrt[]は直接グラフ化できない。
そのため、ログ型アイテムの値を元に、計算型のアイテムを追加する
count("logrt[\"/tmp/test.log\",\"some words pattern\"]",600)
タイプ: Zabbixエージェント(アクティブ) キー: log[/var/log/messages,error|warning,,,skip] データ型: ログ 更新間隔(秒): 60
タイプ: 計算 キー: count_log[/var/log/messages,error|warning,,,skip] 式: count("log[/var/log/messages,error|warning,,,skip]",60) データ型: 数値(整数) 更新間隔(秒): 60
Server=<zabbix server ip> Hostname=zabbix30-proxy # zabbix-serverから名前で引けるようにDNSやhostsに設定する必要あり ConfigFrequency=300 # zabbix-serverと同期する間隔。デフォルトの1時間は長すぎる Timeout=3 # デフォルト3秒 DBPassword=********
Server=192.168.1.10 # zabbix-proxyのprivate IP ListenIP=192.168.1.10 # zabbix-proxyのprivate IP。0.0.0.0としないのは、ホストの自動登録時にIPアドレスが必要なため。 ServerActive=192.168.1.10 # zabbix-proxyのprivate IP
コンパイル時に以下のオプションが必要
--with-libssh2
service postfix stop
echo "update alerts set status=1 where status=0;" | mysql -u zabbix -p zabbix
service postfix start
以下手順で復帰後もアラートメールは送信されることは無かった
service httpd stop service zabbix-server stop service postfix stop
mkpasswd -l 16 > .mysql-root mkpasswd -l 16 > .mysql-zabbix mysqladmin -u root -p password $(cat ~/.mysql-root) echo "SET PASSWORD FOR 'zabbix'@'localhost' = PASSWORD('$(cat ~/.mysql-zabbix)');" | mysql -u root -p$(cat ~/.mysql-root) mysql
vim /etc/zabbix/zabbix_server.conf ---- DBPassword=**** ---- vim /etc/zabbix/web/zabbix.conf.php ---- $DB['PASSWORD'] = '****'; ----
service zabbix-server start service httpd start service postfix start
vim /etc/zabbix/zabbix_server.conf ---- # default:5 むやみに増やすと逆に遅くなるため注意。マニュアルには30以上にすべきではないとある StartPollers=10 ----
sudo yum -y install net-snmp net-snmp-utils snmpwalk -v 1 -c public 192.168.1.1 > v1.txt snmpwalk -v 2c -c public 192.168.1.1 > v2.txt snmpwalk -v 3 -c public 192.168.1.1 > v3.txt
snmptranslate -Tp RFC1213-MIB::tcp snmpwalk -v 1 -c public 192.168.1.1 RFC1213-MIB::tcp
RFC1213-MIB::tcpActiveOpens.0 RFC1213-MIB::tcpPassiveOpens.0 RFC1213-MIB::tcpAttemptFails.0 RFC1213-MIB::tcpEstabResets.0 RFC1213-MIB::tcpCurrEstab.0
snmptranslate -Tp RFC1213-MIB::udp snmpwalk -v 1 -c public 192.168.1.1 RFC1213-MIB::udp
wget --no-check-certificate https://192.168.1.10/READYNASOS-MIB.txt sudo mv READYNASOS-MIB.txt /usr/share/snmp/mibs/ snmpwalk -v 2c -c public 192.168.1.10 READYNASOS-MIB::netgear
wget http://www.readynas.com/download/SNMP/READYNAS-MIB.txt sudo mv READYNAS-MIB.txt /usr/share/snmp/mibs/ snmpwalk -v 2c -c public 192.168.1.10 READYNAS-MIB::netgear
snmpwalk -v 2c -c public 192.168.1.10 READYNAS-MIB::netgear ... READYNAS-MIB::temperatureValue.1 = Wrong Type (should be INTEGER): STRING: "51.0C/123.8F"
snmp host 192.168.1.100 public snmpv2c host 192.168.1.100 public snmp yrifppdisplayatmib2 on
wget http://www.rtpro.yamaha.co.jp/RT/docs/mib/yamaha-private-mib.tar.gz tar xvfz yamaha-private-mib.tar.gz sudo mv yamaha-*.txt /usr/share/snmp/mibs/ snmpwalk -v 2c -c public 192.168.1.1 YAMAHA-SMI::yamahaRT
yum install net-snmp net-snmp-utils
snmptranslate .1.3.6.1.2.1.1.5.0 SNMPv2-MIB::sysName.0
snmptranslate -On SNMPv2-MIB::sysName.0
.1.3.6.1.2.1.1.5.0
snmptranslate -Tp [OID|Name] snmptranslate -Tp SNMPv2-MIB::system +--system(1) | +-- -R-- String sysDescr(1) | Textual Convention: DisplayString | Size: 0..255 ...
mkdir ~/.snmp echo -e "mibdirs /usr/share/snmp/mibs\nmibs all" > ~/.snmp/snmp.conf # 例yamahaルーターのprivate MIB wget http://www.rtpro.yamaha.co.jp/RT/docs/mib/yamaha-private-mib.tar.gz tar xvfz yamaha-private-mib.tar.gz sudo mv yamaha-*.txt /usr/share/snmp/mibs/ # OID to Name snmptranslate .1.3.6.1.4.1.1182.2.1.6.0 YAMAHA-RT-HARDWARE::yrhCpuUtil1min.0 # private MIBツリー snmptranslate -Tp YAMAHA-SMI::yamahaRT +--yamahaRT(2) | +--yamahaRTHardware(1) | | | +--yamahaRTHardware#(0) | | | | | +--yrhMemoryUtilTrap(1) | | | | | +--yrhCpuUtilTrap(2) | | | | | +--yrhSystemAlarmTrap(3) | | | +-- -R-- EnumVal yrhCpuType(1) | | Values: i386(1), i486(2), pentium(3), sh3(4), msp2000(5), ixp1200(6), ad6846(7), msp2100(8), powerQuick3(9), ixp422(10), cn5010(12), c1000(13), qorIQP2(14) ... # 特定の値だけ取得 例: yrhCpuType snmpwalk -v 2c -c public 192.168.1.1 YAMAHA-SMI::yamahaRT.yamahaRTHardware.yrhCpuType YAMAHA-RT-HARDWARE::yrhCpuType.0 = INTEGER: cn5010(12)
Zabbix標準機能として用意されているので簡単。トップページから認証画面を通じるシナリオも作れる。
{user}=user {password}=password
name={name}&password={password}&enter=Enter
{localhost:web.test.fail[localhost zabbix GUI].count(#3,0,gt)}>2
ダッシュボードで「zabbixサーバが動作していません」が出続け、「Zabbixサーバーの起動: いいえ」の場合。
service zabbix-server restart service zabbix-server status
sudo vim /etc/zabbix/web/zabbix.conf.php ---- $ZBX_SERVER = '192.168.1.5'; ---- sudo service httpd restart
# 確認 DisabledならOK getenforce Disabled # 無効にする vim /etc/sysconfig/selinux ---- SELINUX=disabled ---- reboot
echo "update config set authentication_type=0;" | mysql -u zabbix -p zabbix
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>] # 例: 1秒間に最大20行(デフォルト)、古いデータを飛ばすに変える log[/var/log/messages,error|warning,,,skip]
sudo gpasswd -a zabbix wheel sudo chown :wheel /var/log/messages sudo chmod 640 /var/log/messages sudo service zabbix-agent restart
タイプ: Zabbixエージェント(アクティブ) キー: log[/var/log/messages,error|warning,,,skip] データ型: ログ 更新間隔(秒): 60
条件式: ({host1:log[/var/log/messages,error|warning,,,skip].iregexp(error|warning)}=1) &({host1:log[/var/log/messages,error|warning,,,skip].nodata(600)}=0) 障害イベントを継続して生成: 未チェック 深刻度: 警告 (適切に)
logger error logger warning
条件式: ({host1:log[/var/log/messages,error|warning,,,skip].iregexp(error|warning)}=1) &({host1:log[/var/log/messages,error|warning,,,skip].iregexp(test|debug)}=0) &({host1:log[/var/log/messages,error|warning,,,skip].nodata(600)}=0)
条件式: ({host1:log[/var/log/messages,error|warning,,,skip].count(1h,"error","like")}>4) &({host1:log[/var/log/messages,error,,,skip].nodata(600)}=0)
1.8から2.0へアップグレードした場合、discoveryグラフが表示されないので調べた。
zabbix_get -s localhost -k vfs.fs.discovery { "data":[ { "{#FSNAME}":"\/", "{#FSTYPE}":"rootfs"}, ...
zabbix 6.0の場合
ls -lh /usr/share/zabbix/assets/fonts/ total 0 lrwxrwxrwx 1 root root 33 Nov 21 05:33 graphfont.ttf -> /etc/alternatives/zabbix-web-font alternatives --list | grep zabbix zabbix-server auto /usr/sbin/zabbix_server_mysql zabbix-web-font auto /usr/share/fonts/google-noto-cjk/NotoSansCJK-Regular.ttc
記事:
zabbix 2.0.6 で プロファイルから言語を日本語(ja_JP)にしているとグラフの文字化けが起きるので修正。
yum search ipafont
ipa-gothic-fonts.noarch : Japanese Gothic-typeface OpenType font by IPA
ipa-mincho-fonts.noarch : Japanese Mincho-typeface OpenType font by IPA
ipa-pgothic-fonts.noarch : Japanese Proportional Gothic-typeface OpenType font by IPA
ipa-pmincho-fonts.noarch : Japanese Proportional Mincho-typeface OpenType font by IPA
yum -y install ipa-pgothic-fonts.noarch ls -lh /usr/share/fonts/ipa-pgothic/ total 6.0M -rw-r--r-- 1 root root 6.0M Nov 11 2009 ipagp.ttf
ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf /usr/share/fonts/dejavu/ipagp.ttf
vim /usr/share/zabbix/include/defines.inc.php ---- // CentOS6.x define('ZBX_FONTPATH', '/usr/share/fonts/dejavu'); define('ZBX_GRAPH_FONT_NAME', 'ipagp'); // default: DejaVuSans // CentOS5.x define('ZBX_FONTPATH', '/usr/share/fonts/ipa-pgothic'); // default: /usr/share/fonts/dejavu define('ZBX_GRAPH_FONT_NAME', 'ipagp'); // default: DejaVuSans ----
zabbix agent側の設定ファイルに追加する事で、任意のコマンドを実行して値を取得できる。
# log.count[<file path>,<last lines>,<include>] UserParameter=log.count[*],[ -f "$1" ] && tail -n "$2" "$1" | grep "$3" -c
vim /etc/zabbix/zabbix_agentd.d/userparameter_example_monitor.conf ---- UserParameter=key,command ---- # テスト sudo -u zabbix zabbix_agentd -t "key"
UserParameter=wc[*],cat $1 | wc -l # テスト sudo -u zabbix zabbix_agentd -t "wc[/tmp/test]"
UserParameter=sum[*],cat $1 | awk '{sum+=$$1} END {print sum}' # テスト sudo -u zabbix zabbix_agentd -t "sum[/tmp/test]"
echo "100 200 300" > /tmp/test UserParameter=test[*],cat /tmp/test | awk '{print $$$1}' # テスト sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'test[2]' ... [t|200]
# NTP: ntp[<host>,<column number>] UserParameter=ntp[*],ntpq -pn $1 | grep -P '^\*' | awk '{print $$$2}'
ntpq -pn 127.0.0.1 remote refid st t when poll reach delay offset jitter ============================================================================== *133.243.238.164 .NICT. 1 u 178 1024 377 4.835 29.296 6.560 +210.173.160.57 172.29.1.50 2 u 191 1024 377 2.600 28.339 6.392 133.243.237.36 .INIT. 16 u - 1024 0 0.000 0.000 0.000 # delay取得 zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'ntp[127.0.0.1,8]' ntp[ntpq -pn 127.0.0.1 | grep -P '^\*' | awk '{print $8}'] [t|4.835] # offset取得 zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'ntp[127.0.0.1,9]' ntp[ntpq -pn 127.0.0.1 | grep -P '^\*' | awk '{print $9}'] [t|29.296]
sudo yum install smartmontools sudo /usr/sbin/smartctl -A /dev/sda
sudo aptitude install smartmontools sudo /usr/sbin/smartctl -A /dev/sda
sudo /usr/sbin/visudo ---- Defaults !requiretty ---- zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl
# SMART HDD Monitoring discovery. Parameter: hdd.smart.discovery UserParameter=hdd.smart.discovery,sudo smartctl --scan | awk 'BEGIN {f=1;print "{\"data\":["} {if(!f){print ","};f=0;gsub(/\//,"\\/",$1);print "{ \"{#DEVICENAME}\":\""$1"\",\"{#DEVICETYPE}\":\""$3"\" }"} END {print "]}"}' # SMART HDD Monitoring. Parameter: hdd.smart[<device name>,<smartctl attribute name>] UserParameter=hdd.smart[*],sudo smartctl -A $1 | awk '{if($$2 == "$2") print $$10;}'
"C:\Program Files\smartmontools\bin\smartctl" --scan /dev/sda -d ata # /dev/sda, ATA device /dev/sdb -d ata # /dev/sdb, ATA device "C:\Program Files\smartmontools\bin\smartctl.exe" -A /dev/sda
powershell Set-ExecutionPolicy RemoteSigned
Timeout=10 Include=c:\zabbix\zabbix_agentd.userparams.conf
# SMART HDD Monitoring discovery. Parameter: hdd.smart.discovery UserParameter=hdd.smart.discovery,powershell -ExecutionPolicy ByPass C:\zabbix\smart-win.ps1 discovery # SMART HDD Monitoring. Parameter: hdd.smart[<device name>,<smartctl attribute name>] UserParameter=hdd.smart[*],powershell -ExecutionPolicy ByPass C:\zabbix\smart-win.ps1 get $1 $2
zabbix_agentd.exe --config C:\zabbix\zabbix_agentd.conf --stop zabbix_agentd.exe --config C:\zabbix\zabbix_agentd.conf --start
# elapsed time by process. Parameter: process.etime[<process name>,<user>,<cmdline>] UserParameter=process.etime[*],ps -eo comm,user:32,etime,args h | grep -P "^$1\s+$2" | grep -P "$3" | head -n 1 | perl -ane '@t=reverse split(/[:-]/,$F[2]); $s=$t[0]+$t[1]*60+$t[2]*3600+$t[3]*86400; print $s;'
# nginx.log.status.count[<file path>,<last lines>,<http status code>,<include>,<exclude>] UserParameter=nginx.log.status.count[*],[ -f "$1" ] && tail -n "$2" "$1" | grep -v "$5" | grep "$4" | grep "$(LANG=C date '+%d/%b/%Y:%H:%M' -d '1 min ago')" | awk -F' ' '{print $$9}' | grep -P "$3\d+" | wc -l
# Real memory(KB) by process. Parameter: process.rss[<process name>,<user>] UserParameter=process.rss[*],ps -eo comm,user,rss h | grep -P "$1\s+$2\s+" | awk 'BEGIN {sum=0} {sum+=$$3} END {print sum}' # テスト sudo -u zabbix zabbix_agentd -t "process.rss[httpd,apache]"
# %CPU by process. Parameter: process.pcpu[<process name>,<user>] UserParameter=process.pcpu[*],top -b -d1 -n1 -u "$2" 2>/dev/null | perl -ne 'BEGIN { $sum=0; } if($. > 7) { $_ =~ s/^\s+//g; @l=split(/\s+/, $_); if($l[11] =~ m#$1#){ $sum+=$l[8]; } } END { print $sum; }' # テスト sudo -u zabbix zabbix_agentd -t "process.pcpu[httpd,apache]"
# %CPU by process. Parameter: process.pcpu[<process name>,<user>] UserParameter=process.pcpu[*],ps -eo comm,user,pcpu h | grep -P "$1\s+$2" | awk '{sum+=$$3} END {print sum}'
echo "update users set passwd = 'd41d8cd98f00b204e9800998ecf8427e' where alias = 'Admin';" | mysql -u root zabbix
sudo yum install php-ldap openldap-clients
ldapsearch -x -b 'dc=my-domain,dc=com' '(uid=hoge)' \ -H ldaps://localhost:636 \ -D "cn=Manager,dc=my-domain,dc=com" \ -W
php -i | grep -i ldap
障害対応のコメント等で日本語を入力すると"?"に化けてしまう場合、インストール時にDBの文字コードの設定が"latin1"になっているので"utf8"に変更する
vim /etc/my.cnf ---- [mysqld] skip-character-set-client-handshake character-set-server=utf8 # init-connect="SET NAMES utf8" default-table-type=InnoDB [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqldump] default-character-set=utf8 ---- service mysqld restart
cat > zabbix-modify-mysql-charset-utf8.sql << EOS alter database zabbix default character set utf8; alter table zabbix.acknowledges charset=utf8; alter table zabbix.actions charset=utf8; alter table zabbix.alerts charset=utf8; alter table zabbix.applications charset=utf8; alter table zabbix.auditlog charset=utf8; alter table zabbix.auditlog_details charset=utf8; alter table zabbix.autoreg_host charset=utf8; alter table zabbix.conditions charset=utf8; alter table zabbix.config charset=utf8; alter table zabbix.dchecks charset=utf8; alter table zabbix.dhosts charset=utf8; alter table zabbix.drules charset=utf8; alter table zabbix.dservices charset=utf8; alter table zabbix.escalations charset=utf8; alter table zabbix.events charset=utf8; alter table zabbix.expressions charset=utf8; alter table zabbix.functions charset=utf8; alter table zabbix.globalmacro charset=utf8; alter table zabbix.graph_theme charset=utf8; alter table zabbix.graphs charset=utf8; alter table zabbix.graphs_items charset=utf8; alter table zabbix.groups charset=utf8; alter table zabbix.help_items charset=utf8; alter table zabbix.history charset=utf8; alter table zabbix.history_log charset=utf8; alter table zabbix.history_str charset=utf8; alter table zabbix.history_str_sync charset=utf8; alter table zabbix.history_sync charset=utf8; alter table zabbix.history_text charset=utf8; alter table zabbix.history_uint charset=utf8; alter table zabbix.history_uint_sync charset=utf8; alter table zabbix.hostmacro charset=utf8; alter table zabbix.hosts charset=utf8; alter table zabbix.hosts_groups charset=utf8; alter table zabbix.hosts_profiles charset=utf8; alter table zabbix.hosts_profiles_ext charset=utf8; alter table zabbix.hosts_templates charset=utf8; alter table zabbix.housekeeper charset=utf8; alter table zabbix.httpstep charset=utf8; alter table zabbix.httpstepitem charset=utf8; alter table zabbix.httptest charset=utf8; alter table zabbix.httptestitem charset=utf8; alter table zabbix.ids charset=utf8; alter table zabbix.images charset=utf8; alter table zabbix.items charset=utf8; alter table zabbix.items_applications charset=utf8; alter table zabbix.maintenances charset=utf8; alter table zabbix.maintenances_groups charset=utf8; alter table zabbix.maintenances_hosts charset=utf8; alter table zabbix.maintenances_windows charset=utf8; alter table zabbix.mappings charset=utf8; alter table zabbix.media charset=utf8; alter table zabbix.media_type charset=utf8; alter table zabbix.node_cksum charset=utf8; alter table zabbix.nodes charset=utf8; alter table zabbix.opconditions charset=utf8; alter table zabbix.operations charset=utf8; alter table zabbix.opmediatypes charset=utf8; alter table zabbix.profiles charset=utf8; alter table zabbix.proxy_autoreg_host charset=utf8; alter table zabbix.proxy_dhistory charset=utf8; alter table zabbix.proxy_history charset=utf8; alter table zabbix.regexps charset=utf8; alter table zabbix.rights charset=utf8; alter table zabbix.screens charset=utf8; alter table zabbix.screens_items charset=utf8; alter table zabbix.scripts charset=utf8; alter table zabbix.service_alarms charset=utf8; alter table zabbix.services charset=utf8; alter table zabbix.services_links charset=utf8; alter table zabbix.services_times charset=utf8; alter table zabbix.sessions charset=utf8; alter table zabbix.slides charset=utf8; alter table zabbix.slideshows charset=utf8; alter table zabbix.sysmaps charset=utf8; alter table zabbix.sysmaps_elements charset=utf8; alter table zabbix.sysmaps_link_triggers charset=utf8; alter table zabbix.sysmaps_links charset=utf8; alter table zabbix.timeperiods charset=utf8; alter table zabbix.trends charset=utf8; alter table zabbix.trends_uint charset=utf8; alter table zabbix.trigger_depends charset=utf8; alter table zabbix.triggers charset=utf8; alter table zabbix.user_history charset=utf8; alter table zabbix.users charset=utf8; alter table zabbix.users_groups charset=utf8; alter table zabbix.usrgrp charset=utf8; alter table zabbix.valuemaps charset=utf8; EOS cat zabbix-modify-mysql-charset-utf8.sql | mysql -u root zabbix # 確認 echo "show variables like 'character_set_%';" | mysql -u root zabbix Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 echo "show create table zabbix.valuemaps;" | mysql -u root zabbix Table Create Table valuemaps CREATE TABLE `valuemaps` (\n `valuemapid` bigint(20) unsigned NOT NULL DEFAULT '0',\n `name` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '',\n PRIMARY KEY (`valuemapid`),\n KEY `valuemaps_1` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8
使える箇所と使えない箇所がある。またバージョンによっても異なる
監視対象を設定する
proc.mem[java,user1]
proc.mem[httpd]
proc.num[httpd]
zabbix_agentd -t 'proc.num[ruby,,,td-agent]' proc.num[ruby,,,td-agent] [u|2] # td-agentが停止している場合に0を返して欲しい時、以下はNOT_SUPPORTEDになり値が取れない。 zabbix_agentd -t 'proc.num[ruby,td-agent]'
Name: Number of zombie processes Key: proc.num[,,zomb] Update interval: 60 Keep history: 7 Keep trends: 365 Description: Number of processes in zombie state.
Name: Number of sleep processes Key: proc.num[,,sleep] Update interval: 60 Keep history: 7 Keep trends: 365 Description: Number of processes in sleep state.
vim /etc/zabbix/zabbix_agentd.conf ---- EnableRemoteCommands=1 ---- service zabbix-agent restart
名前: Number of DenyHosts キー: system.run["grep -c DenyHosts /etc/hosts.deny"] 更新間隔: 3600
AWS RDSのDNSを入力しようとして発覚
Zabbix server/proxy上で外部スクリプトを実行して結果をZabbixに取り込める
# itemに設定した値 check_oracle.sh["-h","{HOST.CONN}"] # zabbixから実行される値 check_oracle.sh "-h" "192.168.1.4"
# itemに設定した値 check_oracle.sh[-h 192.168.1.4] # zabbixから実行される値 check_oracle.sh www1.company.com -h 192.168.1.4
vi /etc/zabbix/zabbix_server.conf ---- ExternalScripts=/usr/lib/zabbix/externalscripts ----
vi /etc/zabbix/zabbix_server.conf ---- SSHKeyLocation=/etc/zabbix/sshkeys ----
例としてLinuxサーバをzabbix-serverに自動登録する。
zabbix-agentのHostnameに"agent"が含まれる場合に、1.ホスト追加, 2."Linux servers"グループに追加, 3. "Template OS Linux"テンプレートを追加
sudo service zabbix-server stop sudo service httpd stop
tar cfzh zabbix.conf.$(date +%Y%m%d).tar.gz /etc/zabbix/
mysqldump -u root --opt --single-transaction --default-character-set=utf8 --database zabbix | gzip > zabbix.mysql.`date +%Y%m%d`.gz
service zabbix-server stop mysqladmin -u root drop zabbix mysql -u root -e 'CREATE DATABASE zabbix CHARACTER SET utf8;' zcat zabbix.mysql.YYYYMMDD.gz | mysql -u zabbix zabbix
デフォルトではメンテナンス期間を作成してもアラートメールが送信される。
vim /etc/rc.d/init.d/zabbix-agent ---- daemon --user zabbix $exec -c /etc/zabbix/zabbix_agentd.conf ---- service zabbix-agent restart
zabbix_get -s [TARGET IP] -p [AGENT PORT:10050(省略可)] -k "[キー]" 例:loadを取得 zabbix_get -s localhost -k "system.cpu.load[,avg1]"
sudo -u zabbix zabbix_agentd -t "キー" 例:loadを取得 sudo -u zabbix zabbix_agentd -t "system.cpu.load[,avg1]"
# システム情報の取得 systeminfo # パフォーマンスカウンタから取得 typeperf -qx # サービス一覧の取得 sc query # ポート(state=LISTENING) netstat
# OS,アーキテクチャ uname -a # ディストリビューションの確認 # RedHat, CentOS cat /etc/redhat-release # Debian cat /etc/debian_version # Ubuntu cat /etc/lsb-release # CPU cat /proc/cpuinfo # ネットワーク ifconfig -a # メモリ free -m # ディスク df -h # プロセス ps -ef # プロセスツリー pstree -p # ネットワークポート netstat -anp | grep LISTEN | grep tcp
トリガー発生時にメールを飛ばすように、zabbix-server上のスクリプトを実行できる
vi /etc/zabbix/zabbix_server.conf ---- AlertScriptsPath=/usr/lib/zabbix/alertscripts ----
ワンライナーで取得できる値を簡単に取り込める。
zabbix-server,proxyがハックされると、任意のコマンドを実行されてしまうセキュリティ問題が出る
vi /etc/zabbix/zabbix_agentd.conf ---- EnableRemoteCommands=1 LogRemoteCommands=1 ---- service zabbix-agent restart
visudo ---- #Defaults requiretty zabbix ALL=(ALL) NOPASSWD: ALL ----
system.run["ls /var/log/*.log | wc -l"]
host1:sudo /sbin/reboot host2:c:\windows\system32\shutdown.exe -r -f
/var/log/zabbix/zabbix_agentd.log
/var/log/secure
/var/log/auth.log
{host1:icmpping.last(0)}=0
{host1:http.last(0)}=0
{host1:proc.num[syslogd].last(0)}=0
{host1:vfs.file.exists[/tmp/hoge]}>0
{host1:vfs.file.cksum[/etc/passwd].diff(0)}>0
{host1:service_state[W32Time].last(0)}>0
{test:test.trapper.count(#3,1,ge)}>2
{host1:system.cpu.load[,avg1].count(3600,10,gt)}>3
{host1:system.cpu.util[idle,avg1].avg(1800)}<10
{host1:log[/var/log/message].str(error)}=1
({host1:smtp.last(0)}=0) & ({host2:smtp.last(0)}=0)
({Template OS Linux:system.cpu.load[percpu,avg1].last(0)}>5) & (({Template OS Linux:system.cpu.load[percpu,avg1].time(0)}<040000) | ({Template OS Linux:system.cpu.load[percpu,avg1].time(0)}>050000))
アイテムキーやトリガー内で、桁が大きい数値を「K, M, G, T」を使って分かりやすく記述できる
({Template My Linux:system.hostname[host].iregexp(web01)}=1) &({Template My Linux:batch01.result.nodata(25h)}=1)
{HOSTNAME}: {TRIGGER.STATUS}: {TRIGGER.NAME}
Hostname: {HOSTNAME} Event: {EVENT.DATE} {EVENT.TIME} ...