硬件-->系統-->應用
監控:
1.發現故障
2.監控業務系統業務流量
監控的兩種方式:
1.有agent
2.無agent
監控應該具備的主要功能
1.週期性的數據採集
被監控的主機安裝agent
不須要安裝agentless
時間流數據數據項稱之爲一個監控的指標數據
監控模板,調用模板工具
發現能力:當增長設備時,能夠自動歸入監控中
同步內置接口,來發現監控系統,從而完成自動發現新增長的主機
添加主機的方式:1.手動添加。2.自動發現
監控數據的類型的設定:1.手動添加。2.使用模板
2.數據 存儲
數據存儲位置,能夠自主研發,也可使用已存在在數據庫,Zabbix使用的存儲爲MySQL或者PGSQL,存儲容易成爲瓶頸
3.定義閾值,發出警告
合理區間,每一項參數都須要定義一個合理的數據,超過該數據則發出警告,定義表達式,計算結構知足條件纔是危險,不知足才認爲正常。告警須要經過郵件等,
遠程命令或腳本完成自我修復、發出警告
4.可視化
將數據流生成圖標展現出來
1.cacti:採集數據,展現,存儲,告警很差,結合nagios
通過定義crontab任務+snmp+rrd(roundrobin database)數據庫
nagios:只報警,符合就報警,不符合就丟棄
2.Zabbix:採集數據,存儲數據,告警功能,可視化,可以使用grafana作可視化
3.statsd(數據採集)+influxdb(時序數據庫)+grafana
4.prometheus+grafana
數據採集的方式,採集通道
1.agentless:ssh、telnet
2.agent:Zabbix agent、exporter、snmp(通常用於路由器)php
架構體系:
Zabbix Server:負責接收agent發送的報告信息的核心組件,全部位置,統計數據及操做數據均由次組件進行
Zabbix Database:專用於存儲全部的配置信息,收集信息等
Zabbix web GUI:一般與Server運行在同一臺主機上,用來展現數據和配置監控項
Proxy:可選組件,用於分佈式監控系統,代理收集監控信息,而後交給Zabbix Server
Aent:部署在被監控主機上,負責手機本地數據併發往Server或者代理端
工做架構
Zabbix Poller:週期性的獲取監控服務器
poller--->監控項--->觸發器-->觸發時間--->行爲:1.條件 2.操做 :1.遠程命令 2.報警
1.主機添加到zabbix
2.定義指標項
3.定義觸發器
4.定義事件
5.處理動做html
zabbix邏輯組件: 主機組 主機 監控項(item) key:實現獲取監控的目標上的數據的命令或腳本的名稱; 應用(application):同一類監控項的集合; 觸發器(trigger):表達式;PROBLEM, OK; 事件(event): 動做(action):由條件(condition)和操做(operation)組件; 媒介(media):發送通知的通道; 通知(notification): 遠程命令(remote command): 報警升級(): 模板(template):快速定義被監控主機的各監控項的預設項目集合; 圖形(graph):用於展現歷史數據或趨勢數據的圖像; 屏幕(screen):由多個graph組成
功能:1.採集數據、2.存儲、3.定義閾值、4.可視化
安裝方式和基本配置而且啓動服務
1.下載zabbix的倉庫java
[root@tomcat2 ~]# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
2.安裝zabbix等相關軟件包,由於這裏須要使用mysql數據庫,因此直接安裝node
[root@ansible ansible]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
3.配置MySQLpython
[root@tomcat2 ~]# vim /etc/my.cnf.d/server.cnf [mysqld] log_bin=mysql-bin innodb_file_per_table=ON skip_name=resolve=ON max_connections = 20000 innodb_buffer_pool_size = 256M [root@tomcat2 ~]# systemctl start mariadb [root@tomcat2 ~]# mysql mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password'; mysql> quit;
4.配置zabbix_server.confmysql
DBPassword=password #若mysql就在本地,則只須要修改者一處配置便可 ----------------------------------若數據庫不在本地 # SourceIP= #監聽ip LogFileSize=0 #日誌文件大小 # DBHost=localhost #數據庫主機地址 DBName=zabbix #數據庫名 DBUser=zabbix #zabbix數據庫的用戶名 DBPassword=centos #數據庫密碼
5.導入數據文件linux
[root@tomcat2 ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.10/create.sql.gz | mysql -uzabbix -p zabbix #其中-p 後面是跟的數據庫名,不是密碼,若須要直接給密碼,則-p密碼,注意:-p和密碼之間不能有空格
6.修改/etc/httpd/conf.d/zabbix.confios
php_value date.timezone Asia/Shanghai #修改爲正常時區,不然在初始化時會有問題
7.http://主機IP地址/zabbix/ 格式化便可,用戶名密碼默認爲Admin zabbixweb
配置/etc/zabbix/zabbix_agent.conf文件,須要受權才能夠被監控,如果zabbix本機,則直接啓動服務便可
接口:
ZIB、snmp、JMX(jvm虛擬機監控)、ipmi(inter智慧平臺接口,在硬件級接口)
item:指標項指某一特定指標數據,數據流生成時有特定的命令獲取到的時間序列數據
指標:不斷變化的數據數列
指標項:key+執行命令組成
獲取數據
手動添加配置監控主機
1.經過zabbix-agent
配置被監控端服務器sql
[root@tomcat1 yum.repos.d]# vim /etc/zabbix/zabbix_agentd.conf Server=192.168.1.149 [root@tomcat1 yum.repos.d]# systemctl start zabbix-agent.service
建立主機過程
各個選項的意思
通常在局域網內部須要加密,只有在跨網絡在須要加密,加密浪費系統資源
資產清單配置
添加監控項:Applications監控組 items監控項,能夠在key中傳遞參數,如system.cpu.load[percpu,avg1],在[]添加參數便可
能夠手動測試須要那幢zabbix-get
zabbix-get -s 採集數據地址 -p PROT -k 」system.cpu.switches「
使用模板:內建模板,也能夠在GitHub中找
告警
定義action須要在系統級別進行定義:
conditions(條件),一般是event產生,能夠是多個條件
operations(操做):
remote command(遠程命令)或send message(發警報),能夠警報升級
傳遞消息:media(信道)和zabbix的用戶或zabbix group,告警消息的收件地址,有與消息傳遞信道相匹配的收件地址
分佈式監控系統
node:有單獨的監控功能,數據庫,一段時間後 同步給主server,若server故障,可當單獨的監控使用,2.2版本之後被刪除
proxy:只是代理訪問數據,有數據庫,代理無需配置,,數據庫爲臨時存儲,不會持久存儲,須要週期性的同步server端配置
事件的定義
發送報警信息時,須要指定zabbix的用戶,定義該信道收件人所須要的收件地址
發消息
1.定義信道
2.定義針對信道對應的收件地址
定義信道
定義zabbix用戶與此信道匹配的收件地址
腳本存放位置:AlertScriptsPath=/usr/lib/zabbix/alertscripts/
參數:收件人,信息主體,正文
調用腳本相關
1.傳遞信息的通道
Eamil
Script:報警腳本,腳本存放路徑:/usr/lib/zabbix/alertscripts/
zabbix服務器在調用腳本時,會想其傳遞三個參數
$1:經由此信道接收信息的目標;
$2:subject
$3:body
zabbix 3.0以後的版本,此三個變量定義爲內部宏:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2.收件地址
3.腳本
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr, formataddr import sys def formatAddr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr)) def send_mail(to_list,subject,content): mail_host = 'smtp.exmail.qq.com' mail_user = 'USERNAME@DOMAIN.TLD' mail_pass = 'YOUR_PASSWORD' #以上內容根據你的實際狀況進行修改 msg = MIMEText(content,'','utf-8') msg['Subject'] = Header(subject, 'utf-8').encode() msg['From'] = formatAddr('zabbix監控 <%s>' % mail_user).encode() msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(mail_user,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])
執行自定義腳本前提
在agent須要完成的配置:
(1) zabbix用戶擁有所須要的管理權限;
編輯/etc/sudoers文件,註釋以下行;
Defaults requiretty
添加以下行:
zabbix ALL=(ALL) NOPASSWD: ALL
(2) agent進程要容許執行遠程命令;
編輯/etc/zabbix/zabbix_agentd.conf,設置以下配置:
EnableRemoteCommands=1
重啓服務生效;
展現接口
Graph:將多個指標定義成一個張圖
一個屏幕顯示多個圖
屏幕輪詢設置,slide show
模板定義:能夠是模板組,也能夠連接其餘模板,定義時,和定義主機同樣,可是不調用,不生效
導入模板
刪除模板等操做注意問題
宏:macro,預設的文本替換模式
級別:優先級別:主機--->模板---->全局
全局:administrator-->General--->Macros
模板:編輯模板--->Macros
主機:編輯主機--->Macros
類型:
內建:{MACRO_NAME},須要查詢官方文檔
自定義:{$MACRO_NAME}
命名方式:大寫字母、數字和下劃線
配置:
全局
模板宏
主機宏
監控同一個主機能夠打開多路,優先選擇agent
配置網絡自動發現:
基於網絡掃描發現指定網絡中在線,而後添加主機
掃描在線主機問題,須要基於主機名來肯定統一主機,而後經過判斷某主機上基於哪些服務是否存在等方式來判斷是否如今
步驟1.基於主機名和服務掃描在線主機
步驟2 添加主機,增長主機監控模板
步驟3.根據主機之上發現的服務,添加服務模板
主機:主機被發現、主機丟失、主機停機、主機啓用
服務:
發現事件
添加網絡發現,若是根據agent發現,須要想主機發送key請求
配置被發現的主機
[root@tomcat1 ~]# vim /etc/zabbix/zabbix_agentd.conf Server=192.168.1.149 #指定服務器段IP地址
添加到監控主機
key的定義:
在zabbix.agent.conf端的配置文件上由用戶經過UserParameter指令定義key
格式:UserParameter=key,command
實例:不帶參數 定義key
UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $3}' UserParameter=memory.usage.used,/usr/bin/free | awk '^Mem/{print $4}'
手動獲取數據
zabbix_get -s 192.168.1.162 -k "memory.usage.used"
網頁調用key須要在key行數據
實例:帶能夠接受參數的定義key
UserParameter=memory.usage[*],/usr/bin/awk '/^$1/{print $$2}' /proc/meminfo
手動測試
zabbix_get -s 192.168.1.162 -k "memory.usage[參數]"
模板導入完成,必須在每個被監控的主機上配置相對應定義key的文件
web頁面監控
監控hiding站點資源下載速度,及頁面相應時間,相應代碼
1.哪一個頁面
web場景(web scenario)每一個應用都定義成一個場景
web頁面:每個場景都應該監控哪些頁面
內建key:
web.test.in:傳輸速率
web.test.time:響應時長
web.test.rsocode :響應碼
主動監測和被動監測
被動檢測:相對於agent而言;agent, server向agent請求獲取配置的各監控項相關的數據,agent接收請求、獲取數據並響應給server;
主動檢測:相對於agent而言;agent(active),agent向server請求與本身相關監控項配置,主動地將server配置的監控項相關的數據發送給server;
agent端所須要基本配置:
ServerActive= #真正zabbix server端
Hostname= #報告的主機名
HostnameItem= #能夠key發現主機名
zabbix自動捕獲數據
zabbix_sender發送數據:
zabbix server上的某主機上,直接定義Item時隨便定義一個不與其它已有key衝突的key便可,即item type爲「zabbix trapper";
zabbix_sender
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value
配置過程
SNMP和JMX監控
SNMP:簡單網絡管理協議,主要用於監控交換機或路由器等
沒有采集數據的服務端
linux上實現SNMP須要藉助net-snmp程序包
OID:可被採集的數據取一個數字,是一個倒置的樹樁結構
基於SNMP監控: SNMP:簡單網絡管理協議; agent/nms 讀(get, getnext)、寫(set)、trap(陷阱); 161/udp 客戶端 162/udp 管理端 SNMP: v1: 1989 v2c: 1993 v3: 1998 MIB:Management Information Base OID:Object ID Linux啓用snmp的方法: # yum install net-snmp提供agent的 net-snmp-utils工具程序 配置文件: /etc/snmp/snmpd.conf 定義ACL .1.3.6.1.2.1. 1.1.0:系統描述信息,SysDesc 1.3.0:監控時間, SysUptime 1.5.0:主機名,SysName 1.7.0:主機提供的服務,SysService 2.1.0:網絡接口數目 2.2.1.2:網絡接口的描述信息 2.2.1.3:網絡接口類型 …… view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.2 # 網絡接口的相關數據 view systemview included .1.3.6.1.4.1.2021 # 系統資料負載,memory, disk io, cpu load view systemview included .1.3.6.1.2.1.25.1.1 啓動服務: systemctl start snmpd.service 測試工具: # snmpget -v 2c -c public HOST OID # snmpwalk -v 2c -c public HOST OID
JMX,zabbix不能直接去jMX上獲取數據,須要配置java-gateway才能夠,java-gateway也是服務
tomcat主機設置: 監控tomcat:啓用接口 /etc/sysconfig/tomcat或/etc/tomcat/tomcat.conf文件,添加 CATALINA_OPTS="-Djava.rmi.server.hostname=(TOMCAT_SERVER_IP指當前監聽地址) -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" zabbix-java-gateway主機設置: 安裝 zabbix-java-gateway程序包,啓動服務; zabbix-server端設置(須要重啓服務): JavaGateway=172.16.0.70 JavaGatewayPort=10052 StartJavaPollers=5 # 啓動多少個子進程完成JMX 添加監控項: jmx[object_name,attribute_name] object name - 它表明MBean的對象名稱 attribute name - 一個MBean屬性名稱,可選的複合數據字段名稱以點分隔 示例: jmx["java.lang:type=Memory","HeapMemoryUsage.used"] jmx的詳細文檔: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
zabbix分佈式監控
node:中間代理每個都能獨立的工做,擁有數據庫,比較重量級,幾乎全功能的監控數據庫:如今已經不支持
proxy:沒有配置,由server端分發給代理,採集到的數據臨時存儲,同步完成後,就刪除,也須要週期性的同步數據
適用:1.負載較大 2.跨機房,由於端口不肯定,因此爲了方便在防火牆上單獨管理
軟件包 zabbix-proxy-mysql
配置步驟:
1.安裝zabbix-proxy mariadb-server
2.初始化mariadb等相關信息,而且啓動mariadb服務,初始化,建立相關庫,受權,而且導入sql腳本
3.更改配置文件
Server=
zabbix server主機地址;
Hostname=
當前代理服務器的名稱;在server添加proxy時,必須使用此處指定的名稱;
須要事先確保server能解析此名稱;
DBHost=
DBName=
DBUser=
DBPassword=
ConfigFrequency=10
DataSenderFrequency=1
4.將被監控端更改成proxy,將proxy改成server,在定義主機時,直接通過代理便可
調優
Database: 歷史數據不要保存太長時長; 儘可能讓數據緩存在數據庫服務器的內存中; 觸發器表達式:減小使用min(), max(), avg();儘可能使用last(),nodata(); 數據收集:polling較慢(減小使用SNMP/agentless/agent);儘可能使用trapping(agent(active)); 數據類型:文本型數據處理速度較慢;儘可能少收集類型爲text或string類型的數據;多使用類型爲numeric的; zabbix服務器的進程: (1) 服務器組件的數量; alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ... StartPollers=60 #多開幾個處理請求,和cpu核心有關 StartPingers=10 #多啓用幾個測試連通性 ... StartDBSyncer=5 #數據同步,有多少個pollers最好配置多少個次選項 ... (2) 設定合理的緩存大小 CacheSize=8M HistoryCacheSize=16M HistoryIndexCacheSize=4M TrendCacheSize=4M ValueCacheSize=4M (3) 數據庫優化 分表: history_* trends* events* 其它解決方案: grafana:展現 collectd:收集 influxdb:存儲 grafana+collectd+influxdb prometheus: exporter:收集 alertmanager: grafana:展現 openfalcon