zabbix介紹
php
zabbix簡介 html
Zabbix是一個企業級的開源分佈式監控解決方案,由一個國外的團隊持續維護更新,軟件能夠自由下載使用。官方網站:http://www.zabbix.com官方文檔:http://www.zabbix.com/documentation/2.0/manual/quickstart。Zabbix經過C/S模式採集數據,經過B/S模式在web端展現和配置。mysql
Zabbix運行條件:nginx
Server:Zabbix Server需運行在LAMP LNMP環境下,對硬件要求低。web
Agent:目前已有的agent基本支持市面常見的OS,包含Linux、HPUX、Solaris、Sun、windows。sql
SNMP:支持各種常見的網絡設備數據庫
zabbix功能
vim
具有常見的商業監控軟件所具有的功能(主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP等通用協議監控、多種告警方式、詳細的報表圖表繪製)支持自動發現網絡設備和服務器;支持分佈式,能集中展現、管理分佈式的監控點;擴展性強,server提供通用接口,能夠本身開發完善各種監控。windows
優劣勢
bash
優勢:開源,無軟件成本投入;Server對設備性能要求低(實際測試環境:虛擬機CentOS5,2GCPU 1G內存,監控5臺設備,CPU使用率基本保持在10%如下,內存剩餘400M以上);支持設備多;支持分佈式集中管理;開放式接口,擴展性強。
缺點:中文資料較少。
zabbix安裝
lnmp環境搭建(略)
注意參數(PHP):
CFLAGS= CXXFLAGS=./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc--with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd--with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath--enable-shmop --enable-exif --enable-sysvsem --enable-inline-optimization--with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd--enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl--enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip--enable-soap --disable-ipv6 --disable-debug makeZEND_EXTRA_LIBS='-liconv' make install
php.ini配置參數
max_execution_time= 300 memory_limit =128M post_max_size =50M upload_max_filesize= 2M max_input_time =300 date.timezone ="Asia/Shanghai"
zabbix服務端安裝
wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz tar zxvfzabbix-2.4.5.tar.gz cd zabbix-2.4.5 ./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql--with-net-snmp --with-libcurl --with-libxml2 make &&make install useradd -M –s /sbin/nologin zabbix mysql -uroot -p-e "CREATE DATABASE zabbix CHARACTER SET utf8;" mysql -uroot -pzabbix < database/mysql/schema.sql mysql -uroot -pzabbix < database/mysql/p_w_picpaths.sql mysql -uroot -pzabbix < database/mysql/data.sql vim/etc/services zabbix-agent 10050/tcp zabbix-agent 10060/udp zabbix-trapper 10051/tcp zabbix-trapper 10051/udp vim/usr/local/zabbix/etc/zabbix_server.conf DBName=zabbix DBUser=root DBPassword=123456 DBSocket=/tmp/mysql.sock DBPort=3306 cd/usr/local/zabbix/bin/ for i in *;do ln-s /usr/local/zabbix/bin/${i} /usr/bin/${i};done cd/usr/local/zabbix/sbin/ for i in *; do ln-s /usr/local/zabbix/sbin/${i} /usr/sbin/${i}; done cp misc/init.d/fedora/core/zabbix_server/etc/init.d/ cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/ chmod +x /etc/init.d/zabbix_* sed -i's@BASEDIR=/usr/local/@BASEDIR=/usr/local/zabbix1/@' /etc/init.d/zabbix_server sed -i's@BASEDIR=/usr/local/@BASEDIR=/usr/local/zabbix1/@' /etc/init.d/zabbix_agentd /etc/init.d/zabbix_server start /etc/init.d/zabbix_agentd start chkconfig --add zabbix_server chkconfig --addzabbix_agentd chkconfig zabbix_agentd on chkconfig zabbix_server on cp –r frontends/php /data/wwwroot/htdocs/zabbix chown -R www:www /data/wwwroot/htdocs/zabbix/
nginx配置:
server { listen 80 backlog=8192; server_name mon.leerw.com; index index.html index.htm index.php; root /data/wwwroot/htdocs; access_log/data/weblogs/access_nginx.log combined; location / { try_files $uri $uri//index.php?$args; } location ~ ^(.+.php)(.*)$ { fastcgi_split_path_info^(.+.php)(.*)$; root /data/wwwroot/htdocs; #fastcgi_pa***emote_php_ip:9000; fastcgi_passunix:/dev/shm/php-cgi.sock; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_index index.php; include fastcgi.conf; } service nginxrestart && service php-fpm restart
解決亂碼問題:
C:\Windows\Fonts\simkai.ttf
上傳到/data/wwwroot/htdocs/zabbix/fonts/
sed -i's/DejaVuSans/simkai/g' ./include/defines.inc.php service php-fpmrestart
安裝完成後隱藏掉installation按鈕,防止再次安裝。# vim/data/www/coolnull.com/zabbix/include/menu.inc.php文件,註釋如下內容,#爲新添加的
array( 'url' =>'report4.php', 'label' =>_('Notifications') )#, #array( # 'url' => 'setup.php', # 'label' => _('Installation') #)
再次修改下admin密碼
zabbix客戶端安裝
# wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz # tar zxvfzabbix-2.4.5.tar.gz # cd zabbix-2.4.5 # ./configure --prefix=/usr/local/zabbix --enable-agent # make &&make install # vim/usr/local/zabbix/etc/zabbix_agentd.conf Server=172.16.100.106(zabbix server地址) ServerActive=172.16.100.106 Hostname=Zabbixserver
啓動客戶端:
/usr/local/zabbix/sbin/zabbix_agentd
zabbix監控主機
點擊—組態—右上角—主機—建立主機
自定義監控
自定義主機組
一類的hosts能夠歸屬到同一個host group,便於分類管理同一類設備。
建立主機
自定義模板
自定義監控須要理清一下問題:
Items:監控項,這裏就是自定義key
Triggers:建立觸發器。這裏就是監控達到預警的閾值
Graphs:添加圖形
自定義監控,能夠在單臺主機上添加,也能夠先定義成模板應用到主機上,首先建立key.
這裏以監控/etc/passwd的文件數爲例:
建立key,操做客戶端配置文件
# vim /usr/local/zabbix/etc/zabbix_agentd.conf UnsafeUserParameters=1 EnableRemoteCommands=0 Server=127.0.0.1,172.16.100.106 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ # cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/count_line_passwd.conf UserParameter=count.line.passwd,wc-l /etc/passwd|awk '{print $1}' #/etc/init.d/zabbix_agentd restart # zabbix_get -s 127.0.0.1 -k count.line.passwd 26 #
模板已經建立好,下面將模板應用於主機
監控主機
監控報警
定義通知介質
# mkdir /data/wwwroot/htdocs/zabbix/alertscripts/ # cat /data/wwwroot/htdocs/zabbix/alertscripts/mail.sh #!/bin/bash # to=$1 subject=$2 body=$3 /usr/local/bin/sendEmail -f mengtao10@163.com -t "$to" -ssmtp.163.com -u "$subject" -o message-content-type=html -omessage-charset=utf8 -xu mengtao10@163.com -xp vst123 -m "$body"2>> /tmp/22.log # cat/usr/local/zabbix/etc/zabbix_server.conf | grep -i aler # How often Zabbix will try to send unsentalerts (in seconds). ### Option:AlertScriptsPath # Full path to location of custom alertscripts. #AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/data/wwwroot/htdocs/zabbix/alertscripts
安裝sendEmail
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar -xzvfsendEmail-v1.56.tar.gz mv sendEmail /usr/local/bin/
配置action
事件通知配置
建立scree
建立slide show
建立自定義maps
zabbix自動添加主機
監控舉例
zabbix監控MySQL
# vim/usr/local/zabbix/bin/check_mysql_performance.sh #!/bin/bash # MYSQL_SOCK="/tmp/mysql.sock" MYSQL_PWD=123456 ARGS=1 if [ $# -ne"$ARGS" ]; then echo "Please input oneargument:" fi case"$1" in Uptime) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status | cut -f 2 -d":" | cut -f1-d"T"` echo $result ;; Com_update) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status | grep -w"Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status | cut -f5 -d":"|cut -f1-d"0"` echo $result ;; Com_select) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_sent"|cut -d"|" -f3` echo $result ;; Bytes_received) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_begin"|cut-d"|" -f3` echo $result ;; *) echo"Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)" ;; esac
# vim/usr/local/zabbix/etc/zabbix_agentd.conf UserParameter=mysql.version,mysql-V UserParameter=mysql.ping,mysqladmin-uroot -p123456 -S /tmp/mysql.sock ping | grep -c alive UserParameter=mysql.status[*],/usr/local/zabbix/bin/check_mysql_performance.sh$1 $2 #/etc/init.d/zabbix_agentd restart
客戶端進行簡單的測試:
可否能夠正常返回值
基本都enable可用狀態
zabbix監控MySQL主從
在Slave上建立腳本:
# vim/usr/local/zabbix/bin/check_mysql.repl.sh #!/bin/bash # Authorby: Tommy.Gandolf # STATUS=$(/usr/local/mysql/bin/mysql-u root -p123456 -S /tmp/mysql.sock -e "show slave status\G" | grep-i "running") IO_env=`echo$STATUS | grep IO | awk ' {print $2}'` SQL_env=`echo$STATUS | grep SQL | awk '{print $2}'` if ["$IO_env" = "Yes" -a "$SQL_env" = "Yes"]; then echo "1" else echo "0" fi # vim/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_mysql.repl.conf UserParameter=check.mysql.repl,./usr/local/zabbix/bin/check_mysql.repl.sh #./zabbix_agent.sh restart
建立模塊
zabbix監控nginx
Nginx編譯參數:
./configure--prefix=/usr/local/nginx/ --user=www --group=www--with-http_stub_status_module --with--http_spdy_module--with-http_http_spdy_module --with-http_ssl_module --with-ipv6--with-http_gzip_static_module --with-http_realip_module --with-http_flv_module--with-ld-opt='-ljemalloc' --with-http_stub_status_module
location = /status { stub_status on; access_log off; allow 127.0.0.1; allow 172.16.100.106; }
# vim/usr/local/nginx/sbin/nginx_status.sh #!/bin/bash # Scriptto fetch nginx statuses for tribily monitoring systems #License: GPLv4 # SetVariables BKUP_DATE=`/bin/date+%Y%m%d` LOG="/var/log/nginx_status.log" #HOST=`/sbin/ifconfigeth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` HOST=`/sbin/ifconfigeth0 |grep "inet addr" |awk -F[:" "] '{print $13}'` PORT="80" #Functions to return nginx stats functionactive { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Active' | awk'{print $NF}' } functionreading { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Reading' | awk'{print $2}' } functionwriting { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Writing' | awk'{print $4}' } functionwaiting { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Waiting' | awk'{print $6}' } functionaccepts { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$1}' } functionhandled { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$2}' } functionrequests { /usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$3}' } # Run therequested function $1 # vim/usr/local/zabbix/etc/zabbix_agentd.conf.d/zabbix_agent.conf #nginx_status_key UserParameter=nginx.accepts,/usr/local/nginx/sbin/nginx_status.shaccepts UserParameter=nginx.handled,/usr/local/nginx/sbin/nginx_status.shhandled UserParameter=nginx.requests,/usr/local/nginx/sbin/nginx_status.shrequests UserParameter=nginx.connections.active,/usr/local/nginx/sbin/nginx_status.shactive UserParameter=nginx.connections.reading,/usr/local/nginx/sbin/nginx_status.shreading UserParameter=nginx.connections.writing,/usr/local/nginx/sbin/nginx_status.shwriting UserParameter=nginx.connections.waiting,/usr/local/nginx/sbin/nginx_status.shwaiting #chmod +x/usr/local/nginx/sbin/nginx_status.sh #/etc/init.d/zabbix_agentd restart # zabbix_get -s 172.16.100.106 -k "nginx.connections.active" 3 #
zabbix監控Windows
解壓安裝包到相應的路徑下,修改zabbix_agentd.win.conf文件,內容以下:
Server=127.0.0.1,172.16.100.106 ServerActive=127.0.0.1,172.16.100.106 Hostname=OA 啓動:
監控內容:CPU負載,可用內存,磁盤使用狀況,內存使用狀況對比
zabbix監控MySQL php-fpm nginx進程數和佔用內存
# vim/usr/local/zabbix/bin/process_status.sh #!/bin/bash top-bn1>/var/log/zabbix/process.log LOG=/var/log/zabbix/process.log php_fpm(){ grep "php-fpm" $LOG |awk'{sum+=$6}; END{print sum}' } php_fpm_num(){ grep "php-fpm" $LOG |wc -l } nginx(){ grep "nginx" $LOG |awk'{sum+=$6}; END{print sum}' } nginx_num(){ grep "nginx" $LOG |wc -l } mysqld(){ grep "mysqld" $LOG |awk'{sum+=$6}; END{print sum}' } mysqld_num(){ grep "mysqld" $LOG |wc -l } case"$1" in php_fpm) php_fpm ;; php_fpm_num) php_fpm_num ;; nginx) nginx ;; nginx_num) nginx_num ;; mysqld) mysqld ;; mysqld_num) mysqld_num ;; *) echo "Usage: $0{php_fpm|php_fpm_num|nginx|nginx_num|mysqld|mysqld_num}" esac # chmod +x /usr/local/zabbix/bin/process_status.sh # mkdir /var/log/zabbix # chownzabbix:zabbix –R /var/log/zabbix
templates-application--item-trigger--graphs
監控TCP/IP鏈接狀態
在被監控服務器上:
vim/usr/local/zabbix/bin/tcp_status.sh #!/bin/bash #Author by:Tommy.Gandolf # check_status() { netstat -an|awk'/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}' } case"$1" in TIME_WAIT) check_status | grep TIME_WAIT | awk'{print $2}' ;; ESTABLISHED) check_status | grep ESTABLISHED | awk'{print $2}' ;; LISTEN) check_status | grep LISTEN | awk'{print $2}' ;; CLOSE_WAIT) check_status | grep CLOSE_WAIT | awk'{print $2}' ;; FIN_WAIT1) check_status | grep FIN_WAIT1 | awk'{print $2}' ;; FIN_WAIT2) check_status | grep FIN_WAIT2 | awk'{print $2}' ;; SYN_RECV) check_status | grep SYN_RECV | awk'{print $2}' ;; *) echo $"Usage: $0{TIME_WAIT|ESTABLISHED|LISTEN|CLOSE_WAIT|FIN_WAIT1|FIN_WAIT2|SYN_RECV}" exit 2 esac 更改配置文件參數 # vim/usr/local/zabbix/etc/zabbix_agentd.conf # For tcp status UserParameter=check.time_wait,/usr/local/zabbix/bin/tcp_status.shTIME_WAIT UserParameter=check.established,/usr/local/zabbix/bin/tcp_status.shESTABLISHED UserParameter=check.listen,/usr/local/zabbix/bin/tcp_status.shLISTEN UserParameter=check.close.wait,/usr/local/zabbix/bin/tcp_status.shCLOSE_WAIT UserParameter=check.fin_wait1,/usr/local/zabbix/bin/tcp_status.shFIN_WAIT1 UserParameter=check.fin_wait2,/usr/local/zabbix/bin/tcp_status.shFIN_WAIT2 UserParameter=check.syn_recv,/usr/local/zabbix/bin/tcp_status.shSYN_RECV #/etc/init.d/zabbix_agentd start
在監控服務器建立模板
最後來一張預覽圖:
END