一.监控对象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 监控的专用用户
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方法,能够提出性能分析的几个问题
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 ./程序名
工具 描述
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
工具 描述 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状态信息
使用方式:
系统负载
分析工具:
工具 描述 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原理