自动化运维-【多维监控总结】

一.监控对象

学习好监控:
  要对监控对象有理解,如果不理解,怎么能监控的好那?
  监控对象的指标,监控对象的指标是基于对监控对象的理解,才能知道具体要监控那些指标
  确定性能基准线,怎么样才算故障,或者cpu负载多少才算高?

二.监控范围

1.硬件监控
2.操作系统监控(cpu 内存 io 进程 网络流量)
3.应用服务监控
4.业务监控(当天多少人下单?有多少新建用户?)
5.监控范围

三.详细说明

硬件监控

1.ipmi (容易超时,慎用)可以使用自定义item,本地执行ipmitool命令来获取数据
  linux可以通过ipmitool来监控服务器
  前提:
   硬件要支持
   操作系统 linux ipmi
   管理工具 ipmitool
  安装:yum install -y OpenIPMI ipmitool
  调用方式
    本地调用
    远程调用
2.机房巡检

 交换机路由器监控

使用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详解

 系统监控

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

.监控工具

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
      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配置文件
  
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 

五.监控工具zabbix使用

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生产案例

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应用

  监控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

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/p0st/p/9948237.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值