监控系统:zabbix
数据的采集-》存储-》报警(告警)-》展示
监控对象:包括主机,主机之间的数据流量
主机:硬件设备
系统指标:CPU,memory io(disk磁盘io network网络io)
cpu:sys(系统空间的比例),usr(用户空间的比例) idle
业务指标:
SNMP:简单网络管理协议 实现网络管理
jmx:java管理平台
tps:每秒的事务数
qps:每秒的查询书
采集:
多保留趋势数据,历史数据只保留最近几个月的时间
存储:
关系型数据库
rrd轮询存储系统(cacti)轮转 没有对应的接口
时序数据库:时间序列产生的密集型数据存储
influxdb
报警:(发邮件)
写程序调用ATI服务端的接口
展示:
展示界面
nagios:很好的告警系统,默认没有存储系统,不能进行展示
cacti:很好的展示系统,告警系统不行
zabbix:监控系统,整合了所有,接口简单直观 c语言编写 ,展示接口使用PHP
采集:接口(agent snmp ipml imx)
存储:mysql pgsql
报警:email,script脚本(短信,微信) ,远程命令,报警升级
展示:简单图 图形 screen slide show map....
grafana:作为众多的展示接口 可以作为zabbix的接口
statsd:数据采集器
promethues(适用于大规模集群系统监控)+grafana展示
graphite+grafana:
zabbix常用的术语:
host (主机)
host group (主机组)
item 监控项
trigger (触发器)
event(事件)
action(动作)
escaiation(报警升级)
media(媒介)
notification(通知)
remote command(远程命令)
template(模版)
application(应用)
web场景(web scennario)
frontend(前端)zabbix的web接口
trigger(触发器):ok ,PROBLEM,event,action(remote command,alert)
监控核心:监控项
zabbix proxy 分布式监控 可一将部分监控委托出去
zabbix监控Java需要统一专门的网关来实现
实现过程:
准备三台虚拟机:node1 node2 server
LFT[ ntpdate 172.17.0.159(server ip)
1.sever
wget下载包
zabbix-release-3.4-2.el7.noarch.rpm 后缀为rpm要用 yum localinstall 安装
rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
//yum install zabbix-release-3.4-2.e17.noarch.rpm
yum info zabbix-agent
yum repolist
确定数据库配置正确
vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve=ON
innodb_buffer_pool_size=256M
innodb_file_per_table=ON
max_connections=2000
log-bin=master-log
systemctl start mariadb.service
//mysql_secure_installation mysql安全脚本,运行后进入mysql需要密码
yum install zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent zabbix-get zabbix-sender
mysql
>create database zbxdb CHARACTER SET 'utf8 ';建立数据库
>GRANT ALL ON zdxdb.* TO 'zbxuser'@'172.17.0.%'IDENTIFIED BY 'zbxpass';
>flush privileges; 刷新授权
>exit
rpm -ql zabbix-server-mysql
cp /usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz ./
gzip -d create.sql.gz
导入指定文件
mysql -uzbxuser -h172.17.0.159 -pzbxpass zbxdb < create.sql
mysql -uzbxuser -h172.17.0.159 -pzbxpass
>show databases;
>use zbxdb;
>show tables;
>exit
cd /etc/zabbix
cp zabbix_server.conf{,.bak}
vim zabbix_server.conf
//grep -i "^####" zabbix_server.conf
listenport=10051
DBHost=172.17.0.159
DBname=zbxdb
DBUser=zbxuser
DBPassword=zbxpass
DBport=3306
systemctl start zabbix-server.service 启动进程
systemctl status zabbix-server.service查看状态
cd /etc/httpd/conf.d
vim zabbix.conf
vim /etc/php.ini
data.timezone=Asia/Shanghai
systemctl start httpd.service
ss -ntl 查看80端口是否开启
zabbix_get -s 172.17.0.170 -p 10050 -k "net.if.in[eno16777736,packets]"手动获取参数
浏览:
172.17.0.159/zabbix
next step
next step
mysql
172.17.0.159
0
zbxdb
zbxuser
zbxpass
next step
172.17.0.159
10051
server
next step
next step
finish
admin
zabbix
sign in 进入仪表盘
configuration配置
hosts
hostgroups
creat
mysrvs
hosts
creat
node1.magedu.com
node1
mysrvs
172.17.0.170
add
Application
creat
cpu utils
add
creat
memory stats
add
creat
Network interface stats
items
creat
rate of interrupt
zabbix agent
system.cpu.intr cpu的中断次数
172.17.0.170:10050
5s
system stats
preprocessing
change per second
add
monintoring
select
node1
apply
graph
configuration配置
host
action
trigger
operation
//zabbix_get -s 172.17.0.170 -p 10050 -k "system.cpu.intr"
configuration
templates
configuration
hosts
item
rate of packets(in)
zabbix agent
net.if.in[eth1,packeets]
172.17.0.170:10050
numeric(unsigned)
pkts/sec
5s
network interface stats
add
preprocessing
change per second
add
克隆
configuration
hosts
items
找到想要克隆的
clone就可以
定义触发器:
configuration
hosts
triggers
creat
hight speed in pkts
waring
{node1.magedu.com:net.if.in[eth1,packets].last(0)}>100 //add
add
动作:
configuration
actions
action
operation
send message
Asministration
users
admin
media
add
local_email
[email protected]
add
not classifiled
tail /var/log/zabbix/zabbix_server.log
2.node1
zabbix-release-3.4-2.el7-noarch.rpm
wget zabbix-release-3.4-2.el7-noarch.rpm
rpm -ivh zabbix-release-3.4-2.el7-noarch.rpm
yum repolist
yum install zabbix-agent zabbix-sender
cd /etc/zabbix
vim zabbix_agentd.conf
server=172.17.0.159
listenip=0.0.0.0
serverActive=172,17.0.159
hostname=node1.magedu.com
systemctl start zabbix-agent.service
ss -tnl
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
systemctl start redis.service
ss -ntl 6379
visudo
zabbix ALL=(ALL) NOPASSWD:ALL
# befault requiretty
cd /etc/zabbix
vim zabbix_agent.conf
EnableRemoteCommands=1
LogRemoteCommands=1开启记录日志
systemctl restart zabbix-agent.service
*在浏览器加入redist
configuration
hosts
item
redis status
zabbix agent
neet.tcp.service[redis,172.17.0.170,6379]
172.17.170.x:10050
numeric
5s
(new applicaition ) redis
add
monitoringg
latest data
redis
apply
hosts
trigger
creat
redis status down
.....
add
actions
action
redis service unavailable
trigger node1:redis service down
add
operation
5s
new
5m
1 1
remote command
current host
custom script
zabbix agent
sudo /usr/bin/systemctl restart redis service
add
add
recovery
send messages
admin
local_email
add
add
vmstat 1 查看
最后展示:
自定义graph
configuration
hosts
node1 graph点击
create
interface traffic packets
exploded/normal/stacked/pie
item
add
rate of packets(in)
tate of packets(out)
select
add
monitoring
graphs
mysrvs node1 interface traffic packets
screens
node1.magedu.com monitoring graphs
2
2
add
编辑
screens
edit screen
change
maps
create
map
模版:
configuration
templates
create
template
redis stats
redis stats
db services
add
宏():
configuration Actions operation
Default subject:
Default message:
item
name redis listen status{$REDIS_PORT} 运用宏
key net.tcp.listen[{$REDIS_PORT}]
全局宏:
Administration
General Macros
{$SNMP_COMMUNITY} public
{$REDIS_PORT}
Update
//*在server的虚拟机在 安装 redis
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
systemctl start redis.service
//
zabbix
采集:agent/snmp/IPMI/jmx
设备:主机(hosts)-->主机组(hostgroups)
监控项(items)-->应用组(applications)
触发器(triggers 表达式)--> trigger events
动作(actions CONDITIONS ,OPERATIONS ,RECOVERY OPERATIONS)
OPERATIONS:
remote command
send message-->USERS(media)
media type:
可视化:graph slide show map
监配控制:
术语:host group-->host -->application -->item-->trigger-->action(conditions operations)
graph
simple:每个item定义完成后自动生成
customed:用于将多个item的数据整合于一个图形中展示
items:key+parameter(参数)
key:
zabbix内建
type:
agent(server:pull)被动模式
agent(active) (agent:push)主动模式
snmp v1
.....
用户自定义(userprameter)
采集数据:item
采集到的数据类型:
数值:
整数
浮点数
字符数:
字符串
文本
存储的值:
As is:不对数据做任何处理
Delta:(simple change) 本次采样减去前一次采样的值的结果
Delta:(speed per second)本次采样减去前一次采样的值,再除以经过的时长
trigger触发器:界定某特定的item采集到的数据的非合理区间或非合理状态:逻辑表达式
逻辑表达式:阈值 ;通常用于定义数据的不合理区间
ok:正常 状态-->叫老的zabbix版本,其为true;
problem:非正常 状态-->较老的zabbix版本,其为true
ok-->problem
pecovery:problem-->ok
定义触发器的依赖关系
触发器存在可调用的函数:
nodata()
last()
data()
time()
now()
dayofmonth()
触发器表达式:
{hostname:key[paramters].function(arguments)}
> < = # (not equal)...
{n1.magedu.com:net.if.in[eno16777736,packets].last(#1)}>15
trigger间存在依赖关系:
zabbix server <--> router1 <--> host1
事件机制:
四种事件源:trigger discovery,auto regilstration internal
media:媒介
告诫信息的传递通道;
类型:
Email:邮件
script:自定义脚本
sms:短息
jabber :
ez texting:
接收信息的目标为zabbix用户:
需要用户上定义对应各种媒介通道的接收方式
Action:
conditions:
多个条件之间存在逻辑关系
展示接口:
graph:simple custom
screen:把多个graph整合于同一个屏幕进行展示
map
模版:
主机配置模版:用于连接至目标主机实现快速监控管理
link unlink unlink and clear
模版可继承
宏:macro 预设的文本替换模式
级别
全局:Administration-->general -->macros 对所有主机所有模版都有效
模版:编辑模版-->macros 对于链接至此的主机都有效
主机:编辑主机-->macros 只对单个主机有效
类型:
内建:{MACRO_name}
自定义:{$MACRO_NAME}
命名方式:大写字母,数字和下划线;
action:
运行测试: zabbix_get -s 172.17.0.159 -p 10050 -k "net.tcp.listen[6379]"
vim /etc/redis.conf
tail /var/log/zabbix/zabbix_server.logs
hostnamectl set-hostname node1.magedu.com 修改主机名
ntpdate 172.17.0.xxx 同步时间
exec bash 刷新
高级用法:自定义
agent: user parameters (key值) 能不反回字符型数值就不返回字符型数值
key的使用:
如下:
node1:
systemctl start zabbix-agent.service
iptables -F
cd /etc/zabbix
cd zabbix_agent.d
vim memory_usage.conf
UserParameter=memory.used,free -m | awk '/^Mem/{print $3}'
UserParameter=memory.stats[*], cat /proc/meminfo | awk '/^$1/{print $$2}'
systemctl restart zabbix-agent.service
server:
systemctl start zabbix-server.service
systemctl start mariadb
systemctl start httpd
iptables -F
zabbix_get -s 172.17.0.170 -p 10050 -k "memory.used"
实例2:
1.node1
cd /etc/zabbix
cd zabbix_agent.d
yum install nginx php-fpm
vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
pm.status_path= /fpm-status php的状态页
ping.path= /ping
ping.response= pong
systemctl start php-fpm.service
ss -ntl 查看端口是否开启
nginx反代PHP的页面
vim /etc/nginx/nginx.conf
listen 80 default_service
location ~* \.php${
fastcgi_pass 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* /(fpm-status|ping){
fastcgi_pass 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params
allow 127.0.0.1;
deny all;
access_log off;
}
nginx -t
systemctl start nginx.service
172.17.0.170:80/fpm-status
本机测试:
curl -s http://127.0.0.1/fom-status
//67:node
// :server
创建zabbix共享
vim php-fpm.conf
UserParameter=fpm.stats[*],curl -s http://127.0.0.1/fpm-ststus | awk '/^$1/{print $$NFF}'
systemctl restart zabbix-agent.service
server:
zabbix_get -s 172.17.0.170 -p 10050 -k "fpm.stata[idle]"
network discovery:
网络发现是zabbix最具特色的功能之一 它能够根据用户事先定义的规则自动添加监控的主机或服务等
zabbix server扫描指定网络范围内的主机;
发现方式:
ip地址范围
可用服务(ftp ssh http)
zabbix_agent的响应
snmp_agent的响应
分两个阶段:
discovery
action:把discvery events 当作前题条件;
发现:--》discovery events
Service Host
可采取的动作:
send message remote command
add/remove host
enable/disable host
add host to group
link template to host
..
Action:
网络发现中的事件可以触发action,从而自动执行指定的操作
配置网络发现:
node2:68
rpm -ivh zabbix-release-3.4-2.el17.noarch.rpm
yum install zabbix-agent zabbix-sender
scp -r /etc/zabbix/* 172.17.0.172:/etc/zabbix
cd /etc/zabbix
vim zabbix_agentd.conf
Hostname=node2.magedu.com
systemctl start zabbix-agent.service
ss -tnl
configuration
Discovery
creat
test net
172.17.0.170-180
1m
check type: zabbix agent
key: system.uname
add
ip address
enable
add
Actions
Disscovery
Action
auto add host of test.net
operation
web监控:
监控指定的站点的资源下载速度,及页面响应时间,还有响应代码
一个站点 ,有多个页面。
内建key:
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]:响应时长
web.test.rspcode[Scenario,Step]:响应码
主动/被动 检测
被动检测:相对于agent而言,agent server向agent请求获取配置的各监控项相关的数据,agent接收请求,获取数据并响应给server
主动检测:相对于agent而言,agent(action)agent向server请求与自己相关监控项配置,主动的将server配置的监控项相关的数据发送给server
agent端所需要基本配置:
ServerActive =
Hostname=
HostnmaeItem=
zabbix_sender发送数据
zabbix server上的某主机上,直接定义item时随便定义一个不与其它已有key冲突key即可 即item 为“zabbix trapper”;
configuration
hosts
web
creat
基于SNMP监控
SNMP:简单网络管理协议,基于tcp/ip 和udp协议 实现网络设备之间交换监控,或管理信息
agent/nms
SNMP接口: 读(get,getnext)写(set)trap(陷阱);
161/udp 端口 被监控端
162/udp 端口 监控端
SNMP版本:
v1:1989
v2:1993
v3:1998
MIB:management Information Base
OID:Object Id
网络设备:交换机,路由器
要想支持snmp先安装包,linux启用snmp的方法
1.node2:
yum install net-snmp
yum install net-snmp-utils
管控端只需要开启snmptrapd.service
被管控端需要监控套接字只要开启 snmpd.service
cd /etc/snmp
cp snmp.conf{,.bak}
vim snmp.conf
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
//view systemview included .1.3.6.1.4.1.2021
// view systemview included .1.3.6.1.2.1.25.1.1
systemctl start snmp.service
测试:
snmpget -v 2c -c public 172.17.0.x 1.3.6.1.2.1.1.3.0
snmpwalk -v 2c -c public 172.17.0.x
snmpget -h 获取数据
定义ACL
.1.3.6.1.2.1.
1.1.0:系统描述信息
1.3.0:监控时间
1.4.0:系统联系人信息
1.5.0:主机名
1.7.0:主机提供的服务
2.1.0:网络接口数目
2.2.1.2 :网络接口的描述信息
2.2.1.3:网络接口类型snmp
......
JMX:监控 JMX本身就可连接套结字
tomcat主机设置
监控tomcat
/etc/sysconfig/tomcat 添加
CATALINA_OPTS=
zabbix-java-gateway主机设置:
安装 zabbix-java-gateway程序包 启动服务
zabbix-server端的设置:
JavaGateway=172.17.0.x
JavaGateway=10052
StartJavaPollers=5
zabbix proxy的配置
1.node2:
yum install java-1.8.0-openjdk-devel tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp
vim /etc/sysconfig/tomcat
CATALINA_OPTS=" -Djava.rmi.server.hostname=172.17.0.172 -Djavax.management.builder.initial= -Dco.sun.management.jmxremote
=true -Dcom.sun.management.jmxtemote.port=12345 -Dcom.sun.managemen.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
systemctl start tomcat.service
ss -tnl
2.server:
yum install zabbix-java-gateway
cd /etc/zabbix
vim zabbix_java_gateway.conf
systemctl restart zabbix-java-gateway.start
vim zabbix_server.conf
JavaGateway=172.17.0.159
JavaGatewayPort=10052
StartJavaPollers=5
systemctl restart zabbix-server.service
systemctl status zabbix-server.service
zabbix-proxy(代理):分布监控
1.新的虚拟机
ntpdate 172.17.0.x 同步时间
hostnamectl set-hostname zbxproxxy.magedu.com 修改主机名
exec bash刷新
yum install mariadb
vim /etc/my.cnf.d/server.cnf
skip_name_resolve =ON
innodb_file_per_table = ON
innodb_buffer_pool_size= 256M
log-bin =master-log
systemctl start mariadb.service
mysql
>create database zbxproxydb character set 'utf8';
>GRANT ALL ON zbxproxydb.* TO 'zbxproxyuser'@'172.17.0.%' IDENTFIED BY 'zbxproxypass'%;授权
>flush privileges; 刷新权限
node1:
scp zabbix-release-3.4-....noarch.rpm [email protected]/root
rpm -ivh zabbix-re.....
yum install zabbix-proxy
yum install zabbix-proxy-mysql zabbix-get zabbix-aget zabbix-sender
cd /etc/zabbix
rpm -ql zabbix-proxy-mysql
cp /usr/share/doc/zabbix-proxy-mysql-3-4.3/schema-sql.gz .
ls
zgip -d schema.sql.gz
mysql -uzbxproxyuser -h172.17.0.x -pzbxproxypass zbxproxydb < schema.sql
mysql
>use zbxproxdb;
>show tables;
>exit
cd /etc/zabbix
cp zabbix_proxy.conf{,.bak}
vim zabbix_proxy.conf
server=172.17.0.x , 代理ip
ServerPort=10051
Hostname=zbxproxy.magedu.com
listenport=10051
EnbleRemoteCommands=1
LogRemoteCommands=1
DBHost=172.17.0.x
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=zbxproxypass
ConfigFrequency=30
DataSenderFrequency=1
StartPoller=5
StartTrappers=5
StartPingers=1
StratHTTPPollers=1
ServerActive=172.17.0.70,172.18.0.69
systemctl start zabbix-proxy.service
systemctl status zabbix-proxy.service
Administration
proxies
creat
zbxproxy.magedu.com/ ip地址
add
configuration
hosts
creat
node2.magedu.com
node2
snmp hosts
172.17.0.x node2.magedu.com
zabbix.magedu.com
creat item
//vim /etc/hosts
//scp /etc/hosts nodex:/etc
zabix站点服务:
node1为例
yum install nginx
vim /etc/nginx/nginx.conf
server段进行配置
location /stub_status {
stub_status on;
access_log off;
// allow 127.0.0.1;
// deny all;
}
nginx -s reload
systemctl start nginx
cd /etc/zabbix
ls
mkdir -pv /srv/zabbix/libexec
cd /srv/zabbix/libexec
wget nginx.sh (浏览器上)
cat nginx.sh
chmod +x nginx.sh
cd /etc/zabbix/zabbix_agentd.d
wget userparameter ngnx.conf (网上下载)
物理机上安装:
wget zbx_export_templates.xml(获取模版)
configuration
templates
creat
选择文件zbx prox
import
tempates
server:
zabbix_get -s 172.17.0.x -p 10050 -k "nginx.status[active]"
压测一下:
ab -n 10000 -c 100 http://172.17.0.x/index.html
调优:
Database
历史数据不要保存太长时长
尽量让数据缓存在数据库服务器的内存中
触发器表达式:减少使用min() max()avg() 尽量使用last() nodata()
数据收集:polling较慢(减少使用SNMP/agent);尽量使用trapptrapping(agent (active));
数据类型:文本型数据处理速度较慢 尽量少收集类型为text或string 类型的数据 多使用类型为numeric的;
zabbix服务进程:
(1)服务器组件的数量
alerter discoverer escalator http poller hourekeeper icmp pingerr ipmi pooller trapper
configration syncer....
(2)设定合理的缓存大小
(3)数据库优化
其他解决方案:
grafana:展示
collectd:收集
influxdb:存储
grafana+ collectd+influxdb
prometheus:
exporter:收集
alertmanager
grafana:展示
openfalcon
Maintenance 服务维护,系统维护