zabbix监控

zabbix课程大纲

zabbix课程大纲1:什么是监控?2:常见的linux监控命令3:使用shell脚本来监控服务器4:zabbix的基础服务架构5:zabbix生产环境安装6:监控一台服务器主机7:自定义监控项8:自定义触发器9:微信报警10:自定义图形和grafana出图11:自定义监控模板12: zabbix 监控角度总结13: web网站的可用性监测14: 使用percona 插件监控mysql15:snmp监控window和Linux16:zabbix自动发现和自动注册(主动)17:zabbix-agent主动和被动的区别18:zabbix版本升级19:zabbix分布式监控proxy20:zabbix监控jvm原理21:zabbix低级自动发现a:什么是低级自动发现(low level discovery)b:为什么要用低级自动发现c:zabbix模板自带的低级自动发现有哪些?d:增加一个监控项原型e:创建一个低级自动发现规则22:zabbix性能优化23:zabbix api

1:什么是监控?

监控:安防的监控 看监控,事后追责

linux监控: 事前预警,数据分析

2:常见的linux监控命令

cpu

top
htop
uptime
vmstat

内存

free

磁盘

df 
iotop

网卡

iftop   #查看ip地址占用流量
nethogs #查看进程占用流量

系统进程

ps
pstree  #以树状的形式查看进程

系统日志 ELK

3:使用shell脚本来监控服务器

shell+crontab适合服务器数量少的场景

#!/bin/bash
​
avai_mem=`free -m|awk '/^Mem/{print $NF}'`
​
if [ $avai_mem -lt 100 ];then
​
   echo "可用内存过低,当前内存是:$avai_mem" >>/tmp/monitor_mem.log
   echo "可用内存过低,当前内存是:$avai_mem"|mail -s  "服务可用内存低"  [email protected] 
fi

定时任务: * * * * * cmd

4:zabbix的基础服务架构

1578104609224

5:zabbix生产环境安装

#安装zabbix前提,关闭selinux
​
1:配置zabbix的yum源
#下载zabbix-release
wget http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
#安装zabbix-release
rpm -ivh zabbix-release-4.0-1.el7.noarch.rpm
#将官方仓库地址替换为清华仓库地址
sed -i 's#http://repo.zabbix.com#https://mirror.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
​
2:安装zabbix服务端和zabbix-web前端
yum install zabbix-server-mysql zabbix-web-mysql  -y
​
3:安装mariadb,创建zabbix库,授权zabbix用户
yum install mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
先回车
再n
然后一路y
​
mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
​
导入zabbix表结构和初始数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
​
检查zabbix库是否导入成功
mysql -uroot  zabbix -e 'show tables'
​
4:配置启动zabbix-server
vi /etc/zabbix/zabbix_server.conf 
DBHost=localhost 
DBName=zabbix
DBUser=zabbix
DBPassword=123456
​
启动zabbix-server
systemctl start zabbix-server 
systemctl enable zabbix-server
​
检查:
netstat -lntup|grep 10051
​
5:修改Zabbix前端的PHP配置,并启动httpd
vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
​
systemctl start httpd
systemctl enable httpd
​
6:前端zabbix-web的安装
浏览器:http://10.0.0.71/zabbix
​
后期修改zabbix数据库密码的时候,需要修改的配置文件:
/etc/zabbix/web/zabbix.conf.php
​
http://10.0.0.71/zabbix/zabbix.php
登录的账号密码;
Admin
zabbix

6:监控一台服务器主机
监控zabbix-server自己

yum install zabbix-agent.x86_64 -y
systemctl enable zabbix-agent.service 
systemctl start zabbix-agent.service

使用zabbix-agent监控其他主机(10.0.0.8)

wget https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.16-1.el7.x86_64.rpm
rpm -ivh  zabbix-agent-4.0.16-1.el7.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
 Server=10.0.0.71
systemctl enable zabbix-agent.service 
systemctl start zabbix-agent.service
1578107467045
1578107551171
1578107670925
1578107818974
1578107883984

7:自定义监控项

已监控硬盘的tps值为例

a: 命令行取值

iostat|awk '/^sda/{print $2}'

b:修改zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.conf
UserParameter=tps,iostat|awk '/^sda/{print $2}'
​
systemctl restart zabbix-agent.service

c: 在web界面上添加监控项

1578109392596
1578109981484
1578110107350

8:自定义触发器

触发器的作用,实现报警

触发器的方法:

diff()  比较两次取到的值
last()  最新值
avg(5m) 平均5分钟,改值都大于>1 
max(5m)   最大值
min(5m)   最小值
nodate(5m)   没有收到数据报警
1578111639914
1578111885056

9:微信报警

邮件报警

1:配置发件人


1578117861043
1578118015905

2:配置收件人

1578118498621

3:启动报警发消息的动作

1578118575716

微信报警

#上传weixin.py的脚本
python weixin.py 
yum install python-pip -y
pip install requests   -i https://pypi.tuna.tsinghua.edu.cn/simple
​
mv  weixin.py   /usr/lib/zabbix/alertscripts
chmod +x  weixin.py

配置报警媒介

1578120194592
1578120316709
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

配置收件人

1578120384931

重新触发报警

1578120575735
1578120591699
#定制报警内容
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}

10:自定义图形和grafana出图
解决zabbix默认图形乱码问题

cd /usr/share/zabbix/assets/fonts/
#上传一个中文的ttf字体
\mv simkai.ttf graphfont.ttf

a:安装grafana

wget https://mirror.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.5.2-1.x86_64.rpm
yum localinstall grafana-6.5.2-1.x86_64.rpm -y
systemctl start grafana-server.service

b:grafana的主要内容

插件: zabbix的插件
#安装zabbix插件
grafana-cli plugins install alexanderzobnin-zabbix-app
service grafana-server restart
数据源:
登录http://10.0.0.71:3000/login(默认admin:admin)
​
dashboard:

11:自定义监控模板
使用其他人分享的zabbix模板

a:导入模板(测试模板的兼容性)
b:把zabbix-agent的自定义key的配置文件放到/etc/zabbix/zabbix_agentd.d
c:如果有取值脚本,将取值脚本放在对应的目录
d:手动执行脚本测试取值(使用root身份执行)
e:使用zabbix_get测试取值(使用zabbix身份执行)
f:目标主机监控关联模板

自定义模板(监控tcp 11种状态)

ESTABLISHED
SYN_SENT
SYN_RECV
FIN_WAIT1
FIN_WAIT2
TIME_WAIT
CLOSE
CLOSE_WAIT
LAST_ACK
LISTEN
CLOSING

12: zabbix 监控角度总结

服务器硬件(cpu温度,主板温度,功率,风扇的转速,硬盘的健康状态) ipmi芯片  远程管理控制卡idrac,ilo,imm
交换机路由器: snmp协议
​
操作系统  (cpu,内存,硬盘,网卡,系统进程,日志)  zabbix  linux模板
​
应用程序 nginx,mysql,redis,k8s-master      自定义模板(网上现有的模板)
​
业务层面  业务访问速度,流量(pv,uv,ip),活跃用户日活,周活,月活,成单量,交易额
​
日志监控 ELK 

13: web网站的可用性监测

1578708178453
1578708208518
1578708246125
1578708338446

14: 使用percona 插件监控mysql

下载插件

wget  https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm

安装插件

rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm 

15:snmp监控window和Linux
snmp监控:simple network manager protocol

交换机,路由器,打印机 开启snmp,打开snmp服务端

snmp协议三个版本
v1
v2c
v3

使用snmp监控linux

#linux上面snmp服务端,守护进程
yum install net-snmp -y
vim /etc/snmp/snmpd.conf 
    com2sec notConfigUser  default       oldboy
    view    systemview    included   .1
systemctl start snmpd
systemctl enable snmpd
netstat -lntup
​
#zabbix就是snmp客户端  oid
yum install net-snmp-utils.x86_64 -y
snmpwalk -c oldboy -v 2c 10.0.0.7  .1.3.6.1.2.1.25.2.2.0

16:zabbix自动发现和自动注册(主动)

·a:自动发现

配置规则

1578712960516
1578713241018

自动注册:

1578713524401

配置agent客户端

vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.71
ServerActive=10.0.0.71
Hostname=10.0.0.8
HostMetadata=web

17:zabbix-agent主动和被动的区别

18:zabbix版本升级

a:新版本可以提高性能

b:模板不兼容问题

19:zabbix分布式监控proxy

img
1578722935624
#web01上安装zabbix-proxy
 yum install  zabbix-proxy-mysql  mariadb-server -y
 #mysql中创库,授权
 mysql> 略 
 cd /usr/share/doc/zabbix-proxy-mysql-4.0.16/
 gzip -d schema.sql.gz 
 mysql zabbix_proxy -uzabbix -p123456 < schema.sql 
 mysql zabbix_proxy -uzabbix -p123456 -e 'show tables;'
 vim /etc/zabbix/zabbix_proxy.conf 
ProxyMode=0
Server=10.0.0.71
ServerPort=10051
Hostname=sh_proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=123456
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=1
​
 systemctl restart zabbix-proxy.service 
1578724334215

20:zabbix监控jvm原理

#开启tomcat的远程监控
vim /app/apache-tomcat-8.0.27/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=10.0.0.100 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
1578725642492

1578725642492

1578726356540

21:zabbix低级自动发现

a:什么是低级自动发现(low level discovery)

低级自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。

b:为什么要用低级自动发现

低级自动发现特别适合用于监控那些有规律,又有差异的监控对象。例如A主机有3个挂载分区,B主机有4个挂载分区,c主机有5个挂载分区,每个分区挂载目录还不一样,现在要求,监控每一个分区的磁盘总容量,剩余容量,使用容量,block剩余百分比,inode使用百分比,这时候使用普通的zabbix模板根本无法监控

c:zabbix模板自带的低级自动发现有哪些?

1573638926211
1573638991841
1573639499806

d:增加一个监控项原型

增加监控项原型1:

1573744736950

增加监控项原型2:

自定义监控项原型

#修改agent配置文件
[root@hdss7-11 ~]# cat /etc/zabbix/zabbix_agentd.d/net.conf 
UserParameter=net.if.mac[*],ifconfig $1|awk 'NR==4{print $$2}'
#zabbix-get测试取值
[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.11 -k net.if.mac[eth0]
fa:16:3e:f1:36:29
1573745441492

1573745441492

效果展示:

1573745871024

e:创建一个低级自动发现规则

第一个特殊key:定义低级自动发现规则,输出格式为json:例如:{"data":[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]}

第二个key: 监控项原型,取值

第一步:修改agent配置文件

#agent配置文件
[root@k8s-node-2 ~]# cat /etc/zabbix/zabbix_agentd.d/discovery_container.conf 
UserParameter=discovery_container,/bin/bash /opt/discovery_container.sh
UserParameter=container_mem_per[*],/usr/bin/docker stats --no-stream |grep "$1"|awk '{print $$8}'|tr -d '%'

低级自动发现脚本

#!/bin/bash
port=($(/usr/bin/docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
printf '{\n'
printf '\t"data":[\n'
   for key in ${!port[@]}
       do
           if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
              printf '\t {\n'
              printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"
           else [[ "${key}" -eq "((${#port[@]}-1))" ]]
              printf '\t {\n'
              printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"
           fi
   done
              printf '\t ]\n'
              printf '}\n'

第二步:测试取值

[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.17 -k discovery_container
{
    "data":[
     {
            "{#CONTAINERNAME}":"7a4552bf6b07"},
     {
            "{#CONTAINERNAME}":"4081845226ee"},
     {
            "{#CONTAINERNAME}":"9d73c4fc6eb4"},
     {
            "{#CONTAINERNAME}":"7c7aadff9e11"},
     {
            "{#CONTAINERNAME}":"bbf5e3e231e0"}
     ]
}
​
[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.17 -k container_mem_per[bbf5e3e231e0]
0.12

第三步:web界面创建规则和监控项原型

1573745691609
1573745734007

效果展示:

1573745919205

22:zabbix性能优化

1)针对mysql,写多读少 mariadb 5.5 innodb 升级 mysql 5.7 tokudb 2)去掉无用监控项,增加监控项的取值间隔,减少历史数据保存周期 3)把被动模式修改为主动模式,增加zabbix-proxy 4)针对于zabbix-server进程调优,谁忙,就加大它的进程数量 5)针对于zabbix-server缓存调优,谁的剩余内存少,就加大它的缓存值 6)针对zabbix 历史数据和趋势图的表,进行周期性分表( 分表)

23:zabbix api

api:application interface

zabbix集成到其他的平台,把zabbix二次开发

调用api,发起一个http请求

#获取认证
curl -X POST -H "Content-Type: application/json" -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1,
    "auth": null
}'  http://10.0.0.71/zabbix/api_jsonrpc.php
​
{"jsonrpc":"2.0","result":"5fce40fb14005e696d26873c88b83465","id":1}
#创建主机
curl -X POST -H "Content-Type: application/json" -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "oldboy",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "10.0.0.8",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "15"
            }
        ],
        "templates": [
            {
                "templateid": "10272"
            },
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": "5fce40fb14005e696d26873c88b83465",
    "id": 1
}
'  http://10.0.0.71/zabbix/api_jsonrpc.php
curl -X POST -H "Content-Type: application/json" -d '
{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "10295"
    ],
    "auth": "5fce40fb14005e696d26873c88b83465",
    "id": 1
}
'  http://10.0.0.71/zabbix/api_jsonrpc.php

你可能感兴趣的:(zabbix监控)