具體監控命令見此連接:https://my.oschina.net/u/4093217/blog/3036056php
w和uptime查看系統負載 top 動態查看進程使用資源狀況,shell腳本中會使用 佔用CPU的進程能夠是Running,也能夠是Waiting 某一時刻1顆CPU只能有一個進程在使用其資源 top 3秒顯示一次,動態的,默認按cpu百分比排序,按大寫的m(M)鍵,按照內存的使用率大小排序 top -bn1 靜態的顯示,一次性把全部的信息所有輸出出來,也是按cpu百分比排序,適合在寫腳本時使用 cat /proc/cpuinfo 查看CPU信息 lscpu 也能夠查看cpu信息 free命令 ,用來查看內存和swap使用狀況,關注最後一列的available,這個數字是真正剩餘的物理內存大小
模擬一個G的磁盤空間:java
dd if=/dev/zero of=/bigfile bs=1M count=1000 dd(對磁盤進行操做的工具),if(從哪裏來),of(目標的文件或磁盤,此處寫入到跟目錄下,叫bigfile),bs(決定文件大小)=1M(即每一個塊爲1M),count=1000(共有1000個塊),也能夠寫成bs=100M,count=10
mkswap /bigfile 格式化成swap格式 chmod 600 /bigfile 更改權限
swapon /bigfile 掛載
以前的swap大小python
掛載後的大小mysql
yum install -y sysstat 安裝iostat、sar iotop 當磁盤io很忙,可使用iotop查看,得到讀寫的進程是哪一個,按IO使用率大小排序 綜合工具,判定瓶頸點 vmstat 1,關注r、b、si、so、bi、bo、id、wa
sar -n DEV 1 10 查看網卡流量 1是每一秒鐘顯示一次,10是顯示10次 bit 比特(帶寬單位) Byte 字節(速度傳輸單位) 8bit =1Byte 2MB/s 2*8=16Mbit 100Mbit 12.8MB/s nload命令 動態的顯示網卡實時速度的一個頁 ethtool ens33 查看網卡是否鏈接 mii-tool ens33 查看網卡是否鏈接
ps aux 、ps -elf 、ps -eLf(查看線程)
netstat netstat -lnp 查看監聽端口 須要關注上面的端口部分 netstat -an 查看tcp/ip 全部的鏈接狀態 netstat -ltnp 只查看tcp的監聽端口 netstat -ltunp 查看tcp和udp的監聽端口 ss -an和netstat殊途同歸,顯示tcpip狀態
tcpdump -nn -r 1.cap -r讀取一個包 tcpdump -nn -i ens33 tcpdump -nn -i ens33 port 22 只要端口是22的包 tcpdump -nn -i ens33 not port 80 不要80端口的包 tcpdump -nn -i ens33 not port 80 and host 192.168.247.3 不要80端口而且host是192.168.247.3 的包 tcpdump -nn -i ens33 -c 100 只抓取100個包 tshark: tshark -i ens33 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
作監控的目的:能夠提早發現潛在故障隱患,第一時間解決掉,把影響下降。、linux
常見的監控軟件:ios
cacti、nagios、zabbix、open-falcon、prometheus、grafana等等nginx
zabbix官網 www.zabbix.com ,進入官網下載(從二進制包安裝比較方便快捷)git
yum源安裝zabbix :github
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum list |grep zabbix 須要安裝服務端、客戶端的程序 zabbix-get 命令行工具 zabbix-proxy 代理軟件 zabbix-web webUI ,web界面,監控web的鏈接時間、加載時間,確認網站沒有掛掉 zabbix-agent 客戶端的程序,須要啓動 zabbix-server-mysql 服務端的程序,須要啓動 zabbix-web-mysql web和mysql相關組件
須要安裝的包:web
yum install -y zabbix-agent.x86_64 zabbix-get.x86_64 zabbix-server-mysql.x86_64 zabbix-web.noarch zabbix-web-mysql.noarch
建立zabbix庫和用戶
create database zabbix; grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'tobe';
編輯zabbix配置文件 /etc/zabbix/zabbix_server.conf
根據剛纔建立的數據庫名稱,建立的用戶名密碼修改
DBHost=127.0.0.1 #zabbix須要鏈接的數據庫地址 DBName=zabbix 庫名 DBUser=zabbix #用戶名 DBPassword=tobe #密碼
把zabbix-server-mysql中的sql導入到zabbix庫中,所在位置 ls /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz
解壓
gzip -d /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz
導入到zabbix庫中
mysql -uroot -ptobe zabbix < /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql 啓動zabbix服務 systemctl start zabbix-server.service 設置開啓啓動 systemctl enable zabbix-server
注意關閉防火牆或iptables:
setenforce 0
systemctl stop firewalld
啓動成功:
若是啓動失敗,注意查看日誌報錯:
zabbix_server日誌存放路徑 : /var/log/zabbix/zabbix_server.log
netstat -lntp 會監聽10051端口
zabbix_agentd配置文件 : vim /etc/zabbix/zabbix_agentd.conf
配置文件中須要修改下面兩處內容
zabbix監控有兩種模式:主動模式和被動模式
Server=127.0.0.1 ServerActive=127.0.0.1 客戶端主動上報
啓動agent服務 systemctl start zabbix-agent.service 設置開機啓動 systemctl enable zabbix-agent
zabbix_agentd日誌存放路徑 : /var/log/zabbix/zabbix_agentd.log
ps aux |grep zabbix_agentd
安裝webUI,在瀏覽器上安裝,須要啓動httpd服務
netstat -lntp 此時80端口監聽的是nginx,須要停掉,監聽httpd
systemctl stop nginx 停掉Nginx
systemctl start httpd 啓動httpd
或者使用kill -9 PID結束進程
瀏覽器中訪問zabbix: url直接輸入:192.168.183.133/zabbix ,出現安裝頁面
安裝頁面點擊下一步,PHP option "date.timezone"出現報錯
須要修改httpd配置文件 vim /etc/php.ini
lamp的配置文件路徑 ls /etc/php.ini lnmp的配置文件路徑 ls /usr/local/php-fpm/etc/php.ini
找到date.timezone,加上時區
systemctl restart httpd.service 重啓httpd服務,而後到頁面刷新便可,點擊下一步
date.timezone = Asia/Shanghai
輸入數據庫的配置信息
下一步,更改host,name本身定義,點擊下一步:安裝完成
進入登陸界面,用戶名admin,密碼zabbix
在第二臺機器上:
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm yum install -y zabbix-agent.x86_64 客戶端上只須要安裝此包
編輯配置文件:vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.183.3 ServerActive=192.168.183.3 修改爲zabbix-server的ip
啓動agent服務 systemctl start zabbix-agent.service 設置開機啓動 systemctl enable zabbix-agent
ps aux |grep zabbix_agentd
netstat -lntp zabbix_agentd監聽10050端口,會和10051通訊,若是有防火牆的話,須要放行10050端口,或加白名單
加白名單 實現通訊 : iptables -I INPUT -s 192.168.183.3 -j ACCEPT
到weiUI界面設置
先添加主機組,在到hosts中,右邊找到(建立主機)create hosts添加,一臺機器能夠屬於多個組
此處IP地址爲客戶端10050端口的地址
一、到模板中->建立模板
二、把經常使用的監控項目添加到test模板中
模板裏的Template OS Linux中的應用集->CPU的監控項->拷貝(CPU idle time和Processor load (1 min average per core))到test模板
拷貝出這兩個文件到templates模板中
複製完成後,test模板的監控項中,出現這兩項
繼續點擊模板裏的Template OS Linux->監控項->複製Total memory,複製到test中
把Template OS AIX中監控項:Free real memory複製到test,方法同上
點擊Template OS Linux->全克隆
全克隆以後修改模板名稱和羣組,最下面點擊添加
進入剛剛克隆的模板中把連接取消並清理,點擊更新
剛剛克隆的模板中把用不到的都刪除,保留所須要的,把選擇的兩項刪除
刪除是爲了把在刪監控項時減小報錯,由於觸發器中有和監控項關聯的
觸發器中也保留所須要的
監控項也保留所須要的
應用集也同樣
自動發現規則最好不動
完成後,到主機選擇新添加的主機tobejiang->模板->選擇剛剛克隆的模板tobe->添加->更新
使用 zabbix_get -s 192.168.183.33 -p 10050 -k "system.cpu.load[all,avg1]" 測試是否通訊 iptables -I INPUT -s 192.168.183.33 -j ACCEPT 在第一臺server上也要加白名單
出現報錯
兩臺機器都須要重啓: 服務端重啓 systemctl restart zabbix-server.service 客戶端重啓 systemctl restart zabbix-agent.service
重啓服務後,成功
主機也啓動成功
此時在最新數據中,選中此模板->應用,也出現了數據
監測->圖形中,選擇對應主機選項,下方出現圖形界面
監測中的自動發現此時是空的
到配置->主機->選擇tobejiang的自動發現->選中點擊如今檢查
點擊圖形,會多出幾項
監測下的圖形,也多出這幾項
把圖形放到:監測->儀表板中
操做方法:監測->聚合圖形->建立聚合圖形
添加完成後點擊後面的構造函數->點擊更改,選擇須要顯示的圖形
編輯儀表盤右邊模塊->建立新的->輸入名稱->點擊空白處添加構件
添加一個新的構件:圖形->下面的添加新數據集,能夠添加監控項
想要在新建立的screens中顯示tobe02的聚合圖形,須要在聚合圖形界面點擊這個收藏按鈕
點擊保存報錯,不支持中文,把名稱改成英文後,正常保存
配置->主機->觸發器->建立觸發器->添加表達式(結果中的單位爲bit)>=1000000(10M)->添加
配置告警過程:
寫入中文名字時不識別
show create table items\G;
在導入前設置字符集
show variables like 'character%'; 能夠在my.cnf更改字符集
此處因爲已經安裝好了,因此導出表數據
mysqldump -uroot -ptobe --default-character-set=utf8 zabbix > zabbix.sql vim zabbix.sql 編輯導出的sql 把latin1改爲utf8 :1,$s/latin1/utf8/g 查找替換,$表示到最後一行,s表示要查找替換了,/latin1表示須要替換的,/utf8/表示要替換成的內容,g替換全部
導入表數據
mysql -uroot -ptobe --default-character-set=utf8 zabbix < zabbix.sql
此時在回到數據庫 show create table items\G;
已經改成utf8
回到頁面更改,顯示中文
緣由是沒有支持中文的字體
搜索: find . -type f -name "*inc*"
字體存放目錄 : vim /usr/share/zabbix/include/defines.inc.php
搜索font,注意此處fonts的路徑
windows中的字體所在路徑,把須要的字體放到桌面,rz到服務器上
並移動到/usr/share/zabbix/assets/fonts目錄下
先把原來的graphfont.ttf文件更名: mv graphfont.ttf graphfont.ttf.bak 作軟鏈接: ln -s ./simfang.ttf graphfont.ttf
此時回到頁面顯示已正常
阿里雲郵件推送服務 阿里雲 -> 管理控制檯 -> 產品與服務 -> 雲通訊 -> 郵件推送 當即開通 -> 發信域名 -> 新建域名 -> 點擊配置 到dnspod -> 域名解析-> 添加TXT記錄/MX記錄/CNAME 驗證 發信地址 -> 新建發信地址 -> 域名/帳號/發信類型(觸發) -> 設置smtp密碼 SMTP服務地址: smtpdm.aliyun.com ,SMTP服務端口號:25或80或465(SSL加密)
把阿里雲上對應的值寫入便可,主機記錄爲空,寫@
阿里雲上的狀態變爲 可以使用-未備案 便可繼續下一步
建立發信地址和smtp密碼
yum install -y expect 生產隨機字符串使用 mkpasswd -s 0 -l 15 生成密碼複製到郵件推送控制檯中的發信地址
vim mail.py 放到root下就能夠
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_user = 'foutt@tobej.cn' 域名 mail_pass = 'xxxxx' smtp密碼 def send_mail(to_list,subject,content): me = "zabbix 監控告警平臺"+"<"+mail_user+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP("smtpdm.aliyun.com", 25) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
給予755權限,不然不會執行此腳本;
chmod 755 mail.py
測試:給郵箱發郵件,進行測試,把標題爲測試郵件,內容爲my.cnf中的內容發送到foutt7777@163.com
./mail.py foutt7777@163.com "測試郵件" "`cat /etc/my.cnf`"
163郵箱已經收到,測試成功
vim /etc/zabbix/zabbix_server.conf
找到:AlertScriptsPath=/usr/lib/zabbix/alertscripts
把mail.py 挪到這個目錄下來
mv mail.py /usr/lib/zabbix/alertscripts/
cd /usr/lib/zabbix/alertscripts
給它一個755權限 chmod 755 mail.py
1) 設置報警媒介
管理->報警媒介類型->建立媒體類型 腳本參數 -> Add {ALERT.SENDTO}/ Add {ALERT.SUBJECT}/Add {ALERT.MESSAGE}
2)設置接收郵件地址
管理->用戶->選擇admin(或新建) 報警媒介->添加,此處的收件人能夠添加多個
並確認是否有權限,若是沒有權限的話,在用戶處選擇Zabbix administrators羣組,並選擇權限中的用戶類型
3)配置動做
配置->動做->建立動做 設置好名稱後,在操做模塊->新的->選擇發送到的用戶->發送到baojing->點擊添加 恢復操做->新的->選擇用戶->發送到baojing->點擊添加 最後點擊添加便可
測試報警 :
配置->主機 爲了實驗效果,先停用Zabbix server 主機->觸發器->故意調整一個觸發器 :網卡入口流量,改成<=10000000
監測->問題->選擇主機->應用,能夠看到報警
郵箱也收到了報警郵件
測試完成後,把觸發器恢復爲>=10000000,過一下子會收到已解決郵件
更改發送時間
配置->模板->選擇模板->自動發現規則->Network interface discovery的監控項原型->點擊Incoming network traffic on {#IFNAME}->更新間隔改成30s
配置文件中前面不能有空格
在002上安裝Nginx
編輯yum倉庫: vim /etc/yum.repos.d/nginx.repo
粘貼: [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 安裝: yum install -y nginx systemctl start nginx vim /etc/nginx/nginx.conf 配置狀態信息放到此目錄下 配置Nginx狀態信息 vim /etc/nginx/conf.d/default.conf #增長 location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
nginx -t檢查沒有問題
nginx -s reload
進行測試
curl http://127.0.0.1/nginx_status
說明:
字段 |
含義 |
Active Connections |
當前活動鏈接數,其中也包括了等待狀態的鏈接 |
accepts |
接收到的鏈接數 |
handled |
已經處理完的鏈接數,該數字通常和accepts一致,若是不一致那麼說明Nginx出錯了 |
requests |
總共處理的請求數,一個鏈接能夠有多個請求,因此該值比accpets要大 |
Reading |
正在讀取請求頭信息的鏈接數 |
Writing |
正在發送響應報文的鏈接數 |
Waiting |
處於閒置狀態,等待客戶端發送請求的鏈接數 |
在客戶端002上,編寫監控腳本
vim /usr/local/sbin/ngx_status.sh #內容以下 #!/bin/bash url="http://127.0.0.1/nginx_status" curl=/usr/bin/curl # 檢測nginx進程是否存在 function ping { /sbin/pidof nginx | wc -l } # 檢測nginx性能 function active { $curl $url 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { $curl $url 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { $curl $url 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { $curl $url 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { $curl $url 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { $curl $url 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { $curl $url 2>/dev/null| awk NR==3 | awk '{print $3}' } $1
curl
更改權限 chmod 755 /usr/local/sbin/ngx_status.sh
在客戶端002上,編輯zabbix_agent.conf
vi /etc/zabbix/zabbix_agentd.conf # 增長 UserParameter=nginx.status[*],/usr/local/sbin/ngx_status.sh $1 用來定義自定義的腳本,若是有多個腳本,就定義多行,執行該腳本後,能夠獲取到該機器上的某些指標的數值
重啓服務
systemctl restart zabbix-agent
zabbix_get 測試
在服務端執行
zabbix_get -s 192.168.183.33 -k 'nginx.status[accepts]'
導入nginx模板
下載模板 https://github.com/aminglinux/linux2019/blob/master/zabbix_nginx_template/zbx_export_templates.xml
配置->模板->導入,把在上面連接複製的內容複製到xml文件中導入->規則不動->導入
監控nginx的狀態頁
配置->主機->點擊須要設置的機器->模板->選擇Template App NGINX->添加->更新
監控流程:
1)安裝zabbix_java_gateway 2)配置zabbix_java_gateway配置文件和zabbix_server配置文件,指定監聽端口,啓動進程數 3)編輯Tomcat配置文件,開啓JMX 4)添加host,指定JMX interface 5)連接TOMCAT模板
服務端001上,安裝zabbix_java_gateway
yum install -y zabbix-java-gateway
修改配置文件
vim /etc/zabbix/zabbix_java_gateway.conf 去掉 LISTEN_PORT 和 START_POLLERS 的註釋 vim /etc/zabbix/zabbix_server.conf 定義 JavaGateway 和 JavaGatewayPort 和 StartJavaPollers 啓動zabbix-java-gateway服務 systemctl start zabbix-java-gateway 重啓zabbix-server服務 systemctl restart zabbix-server
開啓JMX
vim /usr/local/tomcat/bin/catalina.sh #在#!/bin/sh下增長 export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.183.3 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
重啓tomcat,若是啓動了須要先中止
/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
監聽了9999端口
添加Host連接模板
配置->主機->建立主機 agent代理程序的接口 -> 移除 JMX接口 -> Add -> 192.168.183.3 9999 模板-> 選擇-> Template App Apache Tomcat JMX -> 添加-> 添加
受權一個監控用戶
grant usage, process, replication client on *.* to 'mon'@'localhost' identified by 'x2ay9xodTvyM';
編輯配置文件
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mkdir /var/lib/zabbix 建立目錄 vim /var/lib/zabbix/.my.cnf #建立一個隱藏的配置文件,內容以下 [mysql] host=localhost user=mon password='x2ay9xodTvyM' socket=/tmp/mysql.sock [mysqladmin] host=localhost user=mon password='x2ay9xodTvyM' socket=/tmp/mysql.sock
能夠經過 mysql -umon -px2ay9xodTvyM 看是否可以鏈接
重啓zabbix-agent服務
systemctl restart zabbix-agent
測試
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.ping 若提示:sh: mysqladmin: 未找到命令 須要作軟鏈接: ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.version zabbix_get -s 127.0.0.1 -p 10050 -k mysql.size
添加主機和模板
配置->主機->建立主機 模板->Template DB MySQL->添加->添加