自動化運維-【多維監控總結】

一.監控對象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 監控的專用用戶

  percona安裝 percona安裝二

 

6.zabbix的web監控

選擇主機,選擇web監控

建立web場景

建立步驟,點擊添加

注意,在zabbix的web監控中不會個添加觸發器,須要本身添加觸發器

查看效果

 

七.zabbix觸發器以及告警

  觸發器

  zabbix建立一個tcp timewait數量的觸發器

  

 查看zabbix默認模板裏面的觸發器發現,設置的監控數值都偏低,要先修改默認模板裏面觸發器的數值
  

  告警

    腳本報警

添加腳本參數(在 3.0 版本以前默認傳值不用添加):
     {ALERT.SENDTO}   ####發送地址
     {ALERT.SUBJECT}  ###主題
     {ALERT.MESSAGE}  ###發送內容
zabbix配置結果以下圖:


添加用戶操做命令,做用該發送給誰,什麼時段發送:


添加動做(觸發了觸發器設置的結果)
  定義動做名稱、使用默認選項,而後勾選恢復通知和已啓用。 條件選擇默認便可 操做主要定義發送步驟,選擇發送用戶和發送腳本: 操做步驟定義(時間假如我定義爲 60s):而後操做不走選擇 1-2 說明前面 120 兩次發送 的告警都會發送到 zabbix 這個用戶。
  動做操做結果以下
  注意:整個告警系統依賴的是咱們定義的觸發器的觸發條件,一但咱們監控的數據不知足或者超出咱們設定的監控外,系統就會執行動做:發送消息給用戶: 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方法,能夠提出性能分析的幾個問題

  • What-現象是什麼樣的
  • When-何時發生
  • Why-爲何會發生
  • Where-哪一個地方發生的問題
  • How much-耗費了多少資源
  • How to do-怎麼解決問題

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 ./程序名
磁盤io
  磁盤一般是計算機最慢的子系統,也是最容易出現性能瓶頸的地方,由於磁盤離 CPU 距離最遠並且 CPU 訪問磁盤要涉及到機械操做,好比轉軸、尋軌等。訪問硬盤和訪問內存之間的速度差異是以數量級來計算的,就像1天和1分鐘的差異同樣。要監測 IO 性能,有必要了解一下基本原理和 L  inux 是如何處理硬盤和內存之間的 IO 的。 在理解磁盤IO以前,一樣咱們須要理解一些概念,例如:
    文件系統,VFS,文件系統緩存,頁緩存page cache,緩衝區高速緩存buffer cache,目錄緩存,inode,inode緩存,noop調用策略
  分析工具:  
    工具     描述
    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
網絡
  網絡的監測是全部 Linux 子系統裏面最複雜的,有太多的因素在裏面,好比:延遲、阻塞、衝突、丟包等,更糟的是與 Linux 主機相連的路由器、交換機、無線信號都會影響到總體網絡而且很難判斷是由於 Linux 網絡子系統的問題仍是別的設備的問題,增長了監測和判斷的複雜度。如今  咱們使用的全部網卡都稱爲自適應網卡,意思是說能根據網絡上的不一樣網絡設備致使的不一樣網絡速度和工做模式進行自動調整。
  分析工具:  
    工具       描述
    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狀態信息

  使用方式: 

  //顯示當前UDP鏈接情況 netstat -nu
  //顯示UDP端口號的使用狀況 netstat -apu
  //統計機器中網絡鏈接各個狀態個數 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  //顯示TCP鏈接 ss -t -a
  //顯示sockets摘要信息 ss -s
  //顯示全部udp sockets ss -u -a
  //tcp,etcp狀態 sar -n TCP,ETCP 1
  //查看網絡IO sar -n DEV 1
  //抓包以包爲單位進行輸出 tcpdump -i eth1 host 192.168.1.1 and port 80
  //抓包以流爲單位顯示數據內容 tcpflow -cp host 192.168.1.1

系統負載

  Load 就是對計算機幹活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)簡單的說是進程隊列的長度。Load Average 就是一段時間(1分鐘、5分鐘、15分鐘)內平均Load。
 分析工具:
  工具      描述
  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原理

 

其餘監控工具:piwik  smokeping

相關文章
相關標籤/搜索