一.監控對象php
學習好監控:
要對監控對象有理解,若是不理解,怎麼能監控的好那?
監控對象的指標,監控對象的指標是基於對監控對象的理解,才能知道具體要監控那些指標
肯定性能基準線,怎麼樣纔算故障,或者cpu負載多少纔算高?
二.監控範圍html
1.硬件監控
2.操做系統監控(cpu 內存 io 進程 網絡流量)
3.應用服務監控
4.業務監控(當天多少人下單?有多少新建用戶?)
5.監控範圍
三.詳細說明java
硬件監控node
1.ipmi (容易超時,慎用)可使用自定義item,本地執行ipmitool命令來獲取數據
linux能夠經過ipmitool來監控服務器
前提:
硬件要支持
操做系統 linux ipmi
管理工具 ipmitool
安裝:yum install -y OpenIPMI ipmitool
調用方式
本地調用
遠程調用
2.機房巡檢
交換機路由器監控python
使用snmp(簡單網絡管理協議)監控 注意:服務端和客戶端都必須安裝,這裏咱們使用的是v2版本 yum install net-snmp net-snmp-devel net-snmp-utils -y 說明:net-snmp-devel是爲了使用net-snmp-config,net-snmp-utils是爲了使用snmpwalk。
服務器端: 在啓動Net-SNMP前,爲了防止其它主機訪問您的SNMP代理程序,須要在SNMP代理程序上加入身份驗證機制。
1.配置文件重命名 mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak 2.vim /etc/snmp/snmpd.conf,清空這個文件,接着須要寫入配置信息,命令以下: rocommunity admin 192.168.10.233 注意:添加用戶時,請確保snmp服務沒有運行,不然沒法添加。 注意,這裏的「rocommunity」表示這是一個只讀的訪問權限,緊接着的「admin」至關於密碼,最右邊的「192.168.10.233」表明指定的監控點IP,這意味着只有192.168.10.233有權限來訪問你的SNMP代理程序。 3.啓動snmp服務 systemctl restart snmpd 4.查看是否啓動成功 netstat -nulp 注意:snmp默認監聽udp的161端口 5.使用snmp(系統的全部性能指標都有一個oid) 查看系統第一分鐘負載:snmpget -v2c -c admin 192.168.10.233 1.3.6.1.4.1.2021.10.1.3.1 查看系統負載next get:snmpwalk -v2c -c admin 192.168.10.233 1.3.6.1.4.1.2021.10.1.3 查看系統啓動時間:snmpget -v2c -c admin 192.168.10.233 1.3.6.1.2.1.1.3.0 6.cacti默認就是使用snmp來監控的
客戶端:
1.配置文件重命名
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
2.vim /etc/snmp/snmpd.conf,清空這個文件,接着須要寫入配置信息,命令以下:
rocommunity admin 192.168.10.231 這個192.168.10.231指的是向那個服務器彙報
注意:在服務端和客戶端編輯配置文件的時候,都須要停掉snmpd服務,再重啓
ibm snmp centos安裝snmp snmp中常見的oid snmp詳解
系統監控mysql
cpu:原理
cpu三個最重要的概念:
上下文切換:(cpu調度器:能夠臨時分配一個任務,單位是時間片,CPU調度器實施進程的切換就是cpu上下文切換,切換的越頻繁,對系統的影響越大)
運行隊列(負載):w,uptime命令,每一個cpu的調度器會維持一個運行隊列
使用率:top命令 us:用戶態 sy:內核態 ni:優先級切換 id:空閒的cpu使用率
在監控cpu使用率時,要知道系統上運行的什麼服務,不一樣的服務隊cpu的使用率不同 io密集型:數據庫 cpu密集型:web,email等
肯定性能基準線:
運行隊列:1cpu 4核心 每核心1-3個線程 最多不超過12個線程就算ok
cpu使用率:65%-70%的用戶態的利用率 30%-35%內核態的利用率就算ok 0%-5%空閒
上下文切換: 不必定,cpu使用率越高,上下文切換越頻繁
cpu監控工具:top uptime sysstat(vmstat mpstat)
=================================================================================================================================================================================================
內存:
I/O:input/output(網絡io,磁盤io)
linux上講內存叫作虛擬內存,由於linux的內存是物理內存和交換分區加在一塊兒的,交換系統裏面內存會被分紅頁,默認是4k,最小讀取一頁。硬盤被分紅塊(block)。free命令
[root@node2 ~]# free -m
total used free shared buff/cache available
總內存 已使用的 空閒內存 共享內存 buff/cache內存 可用內存
Mem: 3790 118 3357 8 314 3435
Swap: 3967 0 3967
共享內存:是給進程間進行通訊的內存。
1.尋址
2.空間
須要監控內存使用率和交換分區使用率,通常不設置交換分區,使用的高,linux系統就會把某個進程給kill掉
free vmstat
=================================================================================================================================================================================================
硬盤:
IOPS:每秒的io請求次數
順序io:有些時候順序io接近內存的寫入速度
隨機io:須要尋址,讀寫速度會變慢
iotop df -lh iostat
=================================================================================================================================================================================================
網絡
iftop -n 不作域名解析
正常就是要監控網絡的帶寬,或者使用iftop查看與那個ip產生流量,
=================================================================================================================================================================================================
tcp
tcp協議大概有11種狀態
使用ibm的nmon能夠對系統進行總體的監控 nmon下載 分析文章
=================================================================================================================================================================================================
應用監控
系統監控的指標(硬盤,內存,cpu,網絡)每每受業務影響
舉例:nginx監控
yum install gcc glibc gcc-c++ pcre-devel openssl-devel -y 安裝環境
注意:在編譯的時候要加入--with-http_stub_status_module模塊,否則會監控不到。
wget http://nginx.org/download/nginx-1.10.1.tar.gz
useradd -s/sbin/nologin -M www 普通用戶啓動nginx
./configure --prefix=/usr/local/nginx-1.10.1 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module(此模塊是來進行nginx監控的) (configure是shell腳本,執行他的做用是生成makefile,由於make在工做的時候須要makefile )
make && make install
ln -s /usr/local/nginx-1.10.1 /usr/local/nginx
/usr/local/nginx/sbin/nginx -t 測試配置文件
/usr/local/nginx/sbin/nginx 啓動
/usr/local/nginx/sbin/nginx -s reload 平滑啓動
在配置文件中加入如下配置,前提是必須開啓http_stub_ststus_module模塊
location /nginx-status { stub_status on; access_log off; }
http://192.168.10.232/nginx-status 訪問地址
Active connections: 2 共有多少個活躍的連接
server accepts handled requests
8 8 158 8:共處理了多少個連接 8:成功建立了多少次握手 158:共處理了多少個請求
Reading: 0 Writing: 1 Waiting: 1 Reading:當前讀取到客戶端header的數量 Writing:當前返回給客戶端header的數量 Waiting:等待處理請求的數量
監控四要素:
1.採集 2.存儲 3.告警 4.展現
nagios(不能繪圖)+cacti(不能告警) zabbix(能夠監控 ipmi jvm snmp)
=================================================================================================================================================================================================
監控命令之tsar
四.監控工具linux
zabbix安裝
關閉selinux和firewall
配置zabbix的yum源
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
安裝zabbix程序包,安裝mysql、zabbxi-agent
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server zabbix-agent zabbix-get
啓動mariadb並設置開機啓動,建立數據庫實例,受權
[root@localhost ~]# systemctl start mariadb #啓動mariadb
[root@localhost ~]# systemctl enable mariadb #設置開機啓動
[root@localhost ~]# mysql #登入數據庫
create database zabbix character set utf8 collate utf8_bin; #建立數據庫實例
grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix'; #受權全部主機訪問數據庫實例zabbix,用戶名/密碼:zabbix/zabbix
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; #受權localhost主機名訪問數據庫實例zabbix,用戶名/密碼:zabbix/zabbix
grant all privileges on zabbix.* to zabbix@localhost.localdomain identified by 'zabbix'; #受權localhost.localdomain主機訪問數據庫實例zabbix,用戶名/密碼:zabbix/zabbix
導入初始模式和數據
cd /usr/share/doc/zabbix-server-mysql-3.0/ #進入create.sql.gz所在目錄
zcat create.sql.gz |mysql -uroot zabbix #導入初始模式
配置zabbix-server的配置文件zabbix_server.conf
[root@localhost zabbix-server-mysql-3.0]# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost # 數據主機名
DBName=zabbix # 數據庫實例
DBUser=zabbix # 用戶名
DBPassword=zabbix # 密碼
啓動zabbix-serveer服務
[root@localhost zabbix-server-mysql-3.0]# systemctl start zabbix-server #啓動zabbix-server服務
[root@localhost zabbix-server-mysql-3.0]# systemctl enable zabbix-server #設置zabbix-server服務開機自啓動
編輯Apache的配置文件,消註釋設置正確的時區
[root@localhost zabbix-server-mysql-3.0]# vi /etc/httpd/conf.d/zabbix.conf
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 always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
啓動httpd服務 ,設置開機啓動httpd服務
[root@localhost ~]# systemctl start httpd #啓動httpd服務
[root@localhost ~]# systemctl enable httpd #設置開機啓動httpd服務
啓動zabbix-agent並設置開機自啓動
[root@localhost ~]# systemctl start zabbix-agent # 啓動zabbix-agent服務
[root@localhost ~]# systemctl enable zabbix-agent # 設置zabbix-agent服務開機自啓動
在瀏覽器輸入地址http://服務器ip/zabbix/setup.php,出現歡迎界面,一路點擊下一步,安裝成功 Congratulations! You have successfully installed Zabbix frontend.
配置文件目錄
Configuration file "/etc/zabbix/web/zabbix.conf.php" created.
在瀏覽器輸入http://zabbix服務器ip/zabbix/index.php,輸入管理員用戶名Admin(區分大小寫),默認密碼zabbix,點擊登入便可。
zabbix-agent安裝
注意:zabbix-agent和zabbix-server的版本要相同
關閉selinux和firewall
配置zabbix的yum源
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
安裝zabbix-agent
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=192.168.10.231 #jmx的主機地址
StartJavaPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log #snmp的trap的日誌文件
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts #zabbix-server要執行腳本存放的地方
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000 yum install zabbix-sender zabbix-agent zabbix-get
更改配置文件/etc/zabbix/zabbix_agentd.conf
Server=<zbx-server的ip>
ServerActive=<zbx-server的ip>
Hostname=<本機的名字>
設置開機啓動
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
zabbix詳解
zabbix的使用性能和mysql數據庫有關,能夠把mysql數據庫配置的好一點
若是使用的人較多,能夠用nginx
zabbix-server配置文件
五.監控工具zabbix使用ios
1.宏:至關於變量
2.添加自定義參數
a。在客戶端上的/etc/zabbix/zabbix_agent.d/中,有一個userparameter_mysql.conf的配置文件,咱們能夠根據這個文件來自定義參數
b。咱們自定義nginx的在線人數,安裝ngins-status模塊,訪問:‘http://192.168.10.232:8080/nginx-status’,獲取Active connections的值
使用shell來獲取‘curl -s "http://192.168.10.232:8080//nginx-status" |grep 'Active' |awk '{print $NF}’
c。建立文件並添加內容
[root@node2 zabbix_agentd.d]# cat userparameter_nginx.conf
UserParameter=nginx.active,/usr/bin/curl -s "http://192.168.10.232:8080/nginx-status" |grep 'Active' |awk '{print $NF}'
zabbix-server裏面參數 命令
d。重啓zabbix_agent,在server端使用zabbix_get進行測試
zabbix_get -s 192.168.10.232 -p 10050 -k "nginx.active"
3.自定義圖形
建立item
自定義圖形
自定義screen
自定義map
4.maps
在zabbix-server中的拓撲圖中兩臺主機進行鏈接,單擊一臺主機,按住ctrl,在單擊另外一臺主機,點擊add,就能夠進行鏈接了
在兩臺主機之間進行流量帶寬顯示
5.事件通知
在zabbix裏面event的通知是靠動做(Actions)來完成的通知,Actions默認什麼均可以作,不要單單理解爲報警
1.通知啥? 2.什麼狀況下通知? 3.怎麼通知? 4.經過什麼途徑發送? 5.發送給誰? 6.通知升級告警 7.發送目標(email)
6.完整的告警機制
1.建立用戶組,添加權限,權限只能按用戶組分配
2.建立用戶,並添加到羣組,選擇用戶角色
3.設置報警媒介,注意qq郵箱可能須要開啓pop3協議
4.Actions設置,注意:添加新主機後,在確認其餘用戶的對該主機是否有權限
六.zabbix生產案例nginx
1.項目規劃
主機分組:
交換機,nginx,Tomcat,mysql,web程序
監控對象識別:
1.使用snmp監控交換機
2.使用ipmi監控服務器硬件
3.使用默認agent監控服務器
4.使用jmx監控tomcat
5.監控mysql
6.監控web狀態
7.監控nginx狀態
2.交換機上開啓snmp 幫助
思科:
#show snmp
#config t
(config)# snmp-server community public ro #設置只讀字符串,public爲團體名稱,ro爲只讀
(config)#snmp-server enable traps #啓用snmp陷井,容許路由器將全部類型SNMP Trap發送出去
(config)#snmp-server host 10.10.0.10version 2c public #SNMP採用版本2,public做爲團體名稱
華爲: oid oid2 oid3
<SwitchA> system-view
[SwitchA] snmp-agent//啓動SNMP undo snmp-agent 關閉snmp功能
[SwitchA] snmp-agent sys-info version v2c//設置SNMP協議的版本爲v2
[SwitchA] snmp-agent mib-view included View_ALL iso//建立MIB視圖參數View_AL
[SwitchA] snmp-agent community read cipher public123 mib-view View_ALL//設置讀團體名及MIB視圖權
[SwitchA] snmp-agent community write cipher public123 mib-view View_ALL//設置寫團體名及MIB視圖權
[SwitchA] snmp-agent trap source MEth0/0/1//指定發送Trap的源接口,此處以管理網口爲
[SwitchA] snmp-agent trap enable//使能上傳告警功
Warning: All switches of SNMP trap/notification will be open. Continue? [Y/N]:y #提示v2版本不安全
[SwitchA] snmp-agent target-host trap address udp-domain 192.168.10.231 params securityname public123 v2c #配置192.168.10.231爲esight的IP地址
服務端配置:
systemctl stop snmpd
vim /etc/snmp/snmpd.conf
rocommunity Public123 192.168.1.2
systemctl start snmpd
檢驗:
[root@node1 zabbix-server-mysql-3.0.23]# snmpwalk -v2c -c Public123 192.168.1.2 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.11.67108873 #服務器執行
SNMPv2-SMI::enterprises.2011.5.25.31.1.1.1.1.11.67108873 = INTEGER: 26 #溫度
zabbix上監控:
添加交換機監控項
3.JMX監控java應用c++
監控java應用和監控web和交換機等還有些區別,由於agent不能監控java應用,因此zabbix寫了一個zabbix java gateway 代理的軟件
注意:zabbix java gateway只是一個代理,不存聽任何數據
安裝:yum install -y zabbix-java-gateway java-1.8.0(要安裝java環境)
修改配置文件:vim /etc/zabbix/zabbix_java_gateway.conf
START_POLLERS=5 #開啓監控的數量,是java-gateway詢問java應用的數量
TIMEOUT=3 #超時時間
[root@node1 ~]# systemctl start zabbix-java-gateway.service
[root@node1 ~]# systemctl enable zabbix-java-gateway.service
告訴zabbix-server服務端的zabbix-java-gateway在那個地方
打開zabbix-server配置文件 vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.10.231 #配置地址
StartJavaPollers=5 #啓動多少個進程來監控,是啓動zabbix-server去詢問java-gateway的進程數
重啓zabbix-server:systemctl restart zabbix-server.service
監控tomcat
cd /usr/local/src
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
tar -zxvf apache-tomcat-8.5.35
mv apache-tomcat-8.5.35 /usr/local
ln -s /usr/local/apache-tomcat-8.5.35/ /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh #啓動
由於tomcat默認用8080端口,而個人8080被佔用,因此改成8081
vi /usr/local/apache-tomcat/conf/server.xml
按 /8080 快速檢索,建端口修改成8081
訪問,看是否成功,如不成功檢查防火牆和selinux
啓動tomcat的jmx遠程監控
jmx有三種監控方式:1.無密碼認證 2。用戶名密碼認證 3.ssl認證
打開jmx配置連接http://192.168.10.232:8081/docs/monitoring.html 搜索jmx,單擊Monitoring and Management
打開vim /usr/local/tomcat/bin/catalina.sh,填寫下面內容
CATALINA_OPTS=$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8082(jmx監控的端口,必須寫)
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.10.232"
其中ip爲要監控java應用服務器的ip
重啓tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
監控結果:
1.使用java自帶的性能檢測工具jconsole.exe
2.將jmx監控的主機添加到zabbix,在zabbix-server中使用zabbix-get檢測(後來測試發現zabbix_get不支持jmx)
zabbix上添加
模板配置,在生產中,要修改模板的items,由於有一些沒什麼用
4.監控nginx應用
修改客戶端zabbix_agentd的配置文件
Include=/etc/zabbix/zabbix_agentd.d/修改爲Include=/etc/zabbix/zabbix_agentd.d/*.conf
上傳nginx腳本腳本到要監控的機器上去(客戶端)
cd /etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh
添加腳本執行權限
chmod +x zabbix_linux_plugin.sh
在編譯nginx的時候必須加上http_stub_ststus_module模塊,修改nginx配置文件
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; #只容許本地訪問
deny all;
}
在客戶端(nginx應用存在而地方)測試腳本
./zabbix_linux_plugin.sh nginx_status 8080 active
建立自定義的linux監控配置文件
vim /etc/zabbix/zabbix_agentd.d/linux_status.conf
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
重啓zabbix_agent
systemctl restart zabbix-agent
在服務器端測試是否成功
[root@node1 zabbix_agentd.d]# zabbix_get -s 192.168.10.232 -p 10050 -k linux_status[nginx_status,8080,active]
1
zabbix中自定義模板,添加監控項
注意:全部的腳本和linux監控的配置文件都在要監控的機器上(客戶端)配置安裝,服務器端只要能使用zabbix_get能獲取到數據就OK,可是要輸出正確的key,必定要和配置文件裏面寫的一致,以及linux配置文件啓動參數的個數
監控顆粒度:一般監控的時間爲60s,可是有可能在這60s以內就沒有數據產生,因此監控不到,根據實際生產狀況本身設定監控間隔時間
5.zabbix監控mysql
目前mysql的監控使用zabbix的模板也能夠監控,可是你會發現,自帶的mysql監控項是不多的,根本知足不了公司的需求。因爲它自己自帶的模板太過簡單了,因此須要作更詳細的監控,而percona就提供了這個詳細監控的模版以及腳本,解決了監控不全面的問題https://www.percona.com
percona組成
ss_get_mysql_stats.php #進行數據採集
get_mysql_stats_wrapper.sh #調用php
zabbix的配置文件
zabbix的模板文件
建立zabbix 監控的專用用戶
6.zabbix的web監控
選擇主機,選擇web監控
建立web場景
建立步驟,點擊添加
注意,在zabbix的web監控中不會個添加觸發器,須要本身添加觸發器
查看效果
七.zabbix觸發器以及告警
觸發器
zabbix建立一個tcp timewait數量的觸發器
查看zabbix默認模板裏面的觸發器發現,設置的監控數值都偏低,要先修改默認模板裏面觸發器的數值
告警
腳本報警
添加腳本參數(在 3.0 版本以前默認傳值不用添加): {ALERT.SENDTO} ####發送地址 {ALERT.SUBJECT} ###主題 {ALERT.MESSAGE} ###發送內容
zabbix配置結果以下圖:
![](http://static.javashuo.com/static/loading.gif)
添加用戶操做命令,做用該發送給誰,什麼時段發送:
![](http://static.javashuo.com/static/loading.gif)
添加動做(觸發了觸發器設置的結果)
定義動做名稱、使用默認選項,而後勾選恢復通知和已啓用。 條件選擇默認便可 操做主要定義發送步驟,選擇發送用戶和發送腳本: 操做步驟定義(時間假如我定義爲 60s):而後操做不走選擇 1-2 說明前面 120 兩次發送 的告警都會發送到 zabbix 這個用戶。
動做操做結果以下
![](http://static.javashuo.com/static/loading.gif)
注意:整個告警系統依賴的是咱們定義的觸發器的觸發條件,一但咱們監控的數據不知足或者超出咱們設定的監控外,系統就會執行動做:發送消息給用戶: Admin (Zabbix Administrator) 經過 python_send_mail,接着咱們也就能夠收到郵件告警。
短信報警
八.zabbix監控模式
1.zabbix監控的主機較多,性能可能會跟不上,延遲較大
2.多機房和防火牆等帶來的問題
以上的問題zabbix的輕鬆能夠解決,可是nagios不用太好解決
zabbix默認的獲取數據方式(被動模式,是針對agent來講是被動模式)
zabbix默認的獲取數據的方式是經過問agent來獲取數據,主動模式(active)是agent主動地向zabbix主機進行彙報,當監控主機超過300+建議使用主動模式(隊列裏面備有大量延時的item)
下面將node2改爲主動模式,有兩種方法
打開配置文件:vim /etc/zabbix/zabbix_agentd.conf
第一種方法:將StartAgents=3,修改爲等於0,在等於0的時候被動模式將關閉,而且再也不監聽tcp端口10050
第二種方法:將Server=192.168.10.231註釋掉,打開ServerActive=192.168.10.231的註釋,Hostname=node2修改爲本地的主機名稱
從新啓動zabbix-agent:systemctl restart zabbix-agent
添加模板和主機
能夠看到zabbix-server裏面模板默認的是被動模式的,咱們要修改爲主動模式的
單擊模板->Template OS Linux->選擇全克隆->輸入模板名->單擊保存
單擊Template OS Linux active->鏈接的模板->刪除掉Template App Zabbix Agent,而後單擊監控項->全選->批量更新->類型->主動式(active)->保存
添加主機,和上面的方式同樣
九.zabbix分佈式監控
zabbix proxy(代替zabbix-server去獲取數據):不只僅能夠解決主機多的問題,還能夠解決跨機房的問題
zabbix server <-> zabbix porxy(數據存放在本地) <-> zabbix agent
流程圖
注意:zabbix porxy沒有觸發器,不報警,僅須要一個tcp連接能到zabbix server,將數據發給zabbix-server,而且porxy是有數據庫的,不要講proxy安裝到server的服務器上
安裝zabbix proxy
yum install -y zabbix-proxy zabbix-proxy-mysql mariadb-server
systemctl start mariadb
systemctl enable mariadb
create database zabbix_proxy character set utf8;
grant all on zabbix_proxy.* to zabbix_proxy@localhost identified by 'zabbix_proxy';
導入數據:
cd /usr/share/doc/zabbix-proxy-mysql-3.0.23/
zcat schema.sql.gz | mysql -uzabbix_proxy -pzabbix_proxy
修改proxy的配置文件
vim /etc/zabix/zabbix_proxy.conf
Server=127.0.0.1 修改爲Server=zabbix-server服務器的IP地址
HostName=Zabbix Proxy修改爲HostName=zabbix-proxy
DBHost=localhost
DBName=zabbix-proxy
DBUser=zabbix-proxy
DBPassword=zabbix-proxy
啓動服務
systemctl start zabbix-proxy
注意:zabbix-proxy也是監聽10051,同時也有主動和被動模式
十.zabbix自動化監控
1.自動註冊
zabbix agent自動添加
編輯配置文件
vim /etc/zabbix/zabbix_agent.conf
ServerActive=192.168.10.231 #zabbix-server的IP地址
HostName=node2 #agent的ip地址
HostMetadataItem=system.uname #告訴zabbix-server有什麼特徵,能夠根據items來獲取,也能夠根據HostMetadata來自定義一個,兩個條件只有一個生效
重啓
systemctl restart zabbix-agent
建立動做
查看結果
2.主動發現
自動發現discover
zabbix-api
十一.自動化運維體系
自動化運維體系
other. 故障定位
套用5W2H方法,能夠提出性能分析的幾個問題
cpu:
針對應用程序,咱們一般關注的是內核CPU調度器功能和性能。
線程的狀態分析主要是分析線程的時間用在什麼地方,而線程狀態的分類通常分爲:
a. on-CPU:執行中,執行中的時間一般又分爲用戶態時間user和系統態時間sys。
b. off-CPU:等待下一輪上CPU,或者等待I/O、鎖、換頁等等,其狀態能夠細分爲可執行、匿名換頁、睡眠、鎖、空閒等狀態。
若是大量時間花在CPU上,對CPU的剖析可以迅速解釋緣由;若是系統時間大量處於off-cpu狀態,定位問題就會費時不少。可是仍然須要清楚一些概念:
處理器,核,硬件線程,CPU內存緩存,時鐘頻率,每指令週期數CPI和每週期指令數IPC,CPU指令,使用率,用戶時間/內核時間,調度器,運行隊列,搶佔,多進程,多線程,字長
分析工具:
工具 描述 uptime 平均負載 vmstat 包括系統範圍的cpu平均負載 mpstat 查看全部cpu核信息 top 監控每一個進程cpu用量 sar -u 查看cpu信息 pidstat 每一個進程cpu用量分解 perf cpu 剖析和跟蹤,性能計數分析
說明: uptime,vmstat,mpstat,top,pidstat只能查詢到cpu及負載的的使用狀況。 perf能夠跟着到進程內部具體函數耗時狀況,而且能夠指定內核函數進行統計,指哪打哪。
使用方式:
//查看系統cpu使用狀況 top //查看全部cpu核信息 mpstat -P ALL 1 //查看cpu使用狀況以及平均負載 vmstat 1 //進程cpu的統計信息 pidstat -u 1 -p pid //跟蹤進程內部函數級cpu使用狀況 perf top -p pid -e cpu-clock
內存:
內存是爲提升效率而生,實際分析問題的時候,內存出現問題可能不僅是影響性能,而是影響服務或者引發其餘問題。一樣對於內存有些概念須要清楚:
主存,虛擬內存,常駐內存,地址空間,OOM,頁緩存,缺頁,換頁,交換空間,交換,用戶分配器libc、glibc、libmalloc和mtmalloc,LINUX內核級SLUB分配器
分析工具:
工具 描述 free 緩存容量統計信息 vmstat 虛擬內存統計信息 top 監視每一個進程的內存使用狀況 pidstat 顯示活動進程的內存使用統計 pmap 查看進程的內存映像信息 sar -r 查看內存 dtrace 動態跟蹤 valgrind 分析程序性能及程序中的內存泄露錯誤
說明: free,vmstat,top,pidstat,pmap只能統計內存信息以及進程的內存使用狀況。 valgrind能夠分析內存泄漏問題。 dtrace動態跟蹤。須要對內核函數有很深刻的瞭解,經過D語言編寫腳本完成跟蹤。
使用方式:
//查看系統內存使用狀況 free -m //虛擬內存統計信息 vmstat 1 //查看系統內存狀況 top //1s採集週期,獲取內存的統計信息 pidstat -p pid -r 1 //查看進程的內存映像信息 pmap -d pid //檢測程序內存問題 valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
工具 描述
iostat 磁盤詳細統計信息
iotop 按進程查看磁盤IO的使用狀況
pidstat 按進程查看磁盤IO的使用狀況
perf 動態跟蹤工具
//查看系統io信息 iotop //統計io詳細信息 iostat -d -x -k 1 10 //查看進程級io的信息 pidstat -d 1 -p pid //查看系統IO的請求,好比能夠在發現系統IO異常時,可使用該命令進行調查,就能指定究竟是什麼緣由致使的IO異常 perf record -e block:block_rq_issue -ag ^C perf report
工具 描述 ping 主要透過 ICMP 封包 來進行整個網絡的情況報告 traceroute 用來檢測發出數據包的主機到目標主機之間所通過的網關數量的工具 netstat 用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況 ss 能夠用來獲取socket統計信息,並且比netstat更快速更高效 host 能夠用來查出某個主機名的 IP,跟nslookup做用同樣 tcpdump 是以包爲單位進行輸出的,閱讀起來不是很方便 tcpflow 是面向tcp流的, 每一個tcp傳輸會保存成一個文件,很方便的查看 sar -n DEV 網卡流量狀況 sar -n SOCK 查詢網絡以及tcp,udp狀態信息
使用方式:
系統負載
分析工具:
工具 描述 top 查看系統負載狀況 uptime 查看系統負載狀況 strace 統計跟蹤內核態信息 vmstat 查看負載狀況 dmesg 查看內核日誌信息
使用方式:
//查看負載狀況 uptime top vmstat
//統計系統調用耗時狀況 strace -c -p pid
//跟蹤指定的系統操做例如epoll_wait strace -T -e epoll_wait -p pid
//查看內核日誌信息 dmesg
zabbix開啓debug模式
45 ### Option: DebugLevel 46 # Specifies debug level: 47 # 0 - basic information about starting and stopping of Zabbix processes 48 # 1 - critical information 49 # 2 - error information 50 # 3 - warnings 51 # 4 - for debugging (produces lots of information) 52 # 5 - extended debugging (produces even more information) 53 # 54 # Mandatory: no 55 # Range: 0-5 56 # Default: 57 # DebugLevel=3
將DebugLevel=3修改成DebugLevel=4,才進入zabbix_agent的debug模式
而後查看日誌/var/log/zabbix_agent.log,分析問題
zabbix之後可能遇到的瓶頸
1.當服務器數量到幾百臺的時候,而且要作到每服務器的數據要保存三年。數據庫的優化也個難題。數據庫裏面有幾張表會變得特別大。可能好的解決辦法是一年使用一個庫,來緩解數據量大和時間長的問題。也能夠給表作表分區和優化 2.當服務器數量太多的時候,到2000臺甚至更多的時候,可能主動模式和zabbix proxy也不會太還用
cpu 工做原理
snmp原理
immp原理