• 分布式监控,好处是提高信息数据采集,降低server端的压力,对用户的体验还是稳定性都是很好的选择。proxy和agent一样分为主被动,日常中一般使用主动模式(默认),agent端主动将数据提交给proxy端, 然后proxy主动推给server端,server端进行数据的分析和告警。
  • 分布式结构,了解
  1. zabbix数据收集
  • agent多平台部署
  • 支持SNMP和IPMI
  • 支持无agent监控
  • 自定义监控
  • 支持监控计算和聚合
  • web事务监控
  1. 数据展示
  • 图表及监控大屏
  • 网络拓扑图
  • 幻灯片图表
  • 图片展示插件
  1. 故障检测(功能)
  • 故障预警
  • 故障规则和恢复规则独立
  • 多个告警规则组合
  • 与历史数据对比分析告警
  • 支持数据波动规则
  • 告警依赖关系
  1. 告警发送
  • 发送告警信息
  • 自动修复故障
  • 告警升级
  • 自定义告警信息
  • 告警关联
  1. 安全和认证
  • 加密通信
  • 统一认证
  • 权限管理
  1. zabbix架构

image.png

  • 如果设备较多,分布在多地域多机房,可以通过zabbix proxy实现分布式架构部署

    基本术语

  1. 组件功能:
  • frontend 前端
  • zabbix API zabbix的接口
  • zabbix server zabbix服务端
  • zabbix agent zabbix客户端
  • zabbix proxy zabbix代理
  • network discovery 网络自动发现
  • active agent auto-registration 主动agent自动注册
  • low-level discovery 低级自动发现
  1. 监控收集:
  • host 主机
  • host group 主机组
  • item 监控项
  • value preprocessing 预处理
  • template 模板
  • application 应用
  • web scenario web场景
  • macros 宏
  1. 数据展示:
  • graph 图表
  • screen 聚合图表
  • maps 拓扑图
  • slide shows 幻灯片演示
  1. 告警相关:
  • trigger 触发器
  • event 事件
  • problem 异常状态
  • OK 正常状态
  • action 操作
  • escalation 升级
  • media 媒介
  • notification 通知
  • remote command 远程命令
  • maintenance 维护模式

    安装配置

  1. 安装过程,可参考官网
  • 注意看安装需求(软件版本):前往
  1. 用aliyun的镜像加速,安装epel源
  1. 安装常用的开发组件
  • yum groups install “Development Tools”
  • yum groups info “Development Tools”
  1. 增加Zabbix镜像源
  • rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
  • 也可以使用国内源
    • rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
    • 下载好后,就是zabbix.repo了,然后修改其内部的地址为国内的就OK,vim下进行下面的替换
    • :%s#repo.zabbix.com#mirror.tuna.tsinghua.edu.cn/zabbix#g
    • 因此,第6步就顺畅多了
  1. 关闭SElinux
  • systemctl stop firewalld.service systemctl disable firewalld.service
  • vim /etc/selinux/config yum install iptables-services
  1. 安装Zabbix Server和Frontend
  • yum install zabbix-server-mysql
  • yum install zabbix-web-mysql
  1. 安装配置数据库,导入初始数据
  • yum install mariadb-server -y
  • systemctl start mariadb.service systemctl status mariadb.service
  • mysql_secure_installation 初始化
  1. 创建数据库
  • mysql -uroot -p
  • create database zabbix character set utf8 collate utf8_bin; 数据库的字符集
  • grant all privileges on zabbix.* to zabbix@localhost identified by ‘zabbix’;
  1. 导入数据结构
  • zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix
  • 查到数据文件的路径, rpm -ql zabbix-server-mysql
  1. 配置zabbix server
  • vim /etc/zabbix/zabbix_server.conf,修改内容

    1. DBPassword=zabbix
  • grep -Ev '^$|#' /etc/zabbix/zabbix_server.conf ,查看刚刚改过的内容

  1. 启动zabbix server
  • systemctl start zabbix-server.service systemctl status zabbix-server.service
  • more /var/log/zabbix/zabbix_server.log
  • netstat -ntlp 查看端口也是ok的
  1. 配置zabbix frontend,vim /etc/php.ini

    1. max_execution_time = 300
    2. memory_limit = 128M
    3. post_max_size = 16M
    4. upload_max_filesize = 2M
    5. max_input_time = 300
    6. max_input_vars = 10000
    7. always_populate_raw_post_data = -1
    8. date.timezone = Asia/Shanghai
  2. 启动httpd,然后访问

  1. Configuration file "/etc/zabbix/web/zabbix.conf.php" created. 这里提示的文件,就保存有数据库连接信息
  2. 安装zabbix agent, 启动(server可以自己监控自己)
  • yum install zabbix-agent systemctl start zabbix-agent.service
  • vim /etc/zabbix/zabbix_agent.conf Hostname=Zabbix server,注意要和在web页面填写的保持一致
  1. 其他的主机安装agent
  • wget https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.2-1.el7.x86_64.rpm 选择一个agent即可
  • rpm -ivh rpm包名 后面加上参数 —force —nodeps可以忽略依赖强制安装上
  • 新建两个container,172.17.0.3和172.17.0.4,可ssh远程过去,修改zabbix_agent配置

image.png
image.png

源码包安装

  1. ```bash 注意:以下都以centos7为OS进行操作,操作前检查自己的系统版本。 因为每个人环境不同,很可能你的是minimal的OS,那注意需要把类似php等基本的依赖包一并安装好 下载zabbix server源码包 wget -O zabbix-4.0.4.tar.gz https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.4/zabbix-4.0.4.tar.gz/download

安装依赖 yum install wget telnet net-tools python-paramiko gcc gcc-c++ dejavu-sans-fonts python-setuptools python-devel sendmail mailx net-snmp net-snmp-devel net-snmp-utils freetype-devel libpng-devel perl unbound libtasn1-devel p11-kit-devel OpenIPMI unixODBC libevent-devel mysql-devel libxml2-devel libssh2-devel OpenIPMI-devel java-1.8.0-openjdk-devel openldap-devel curl-devel unixODBC-devel 注意先把之前安装过的包删除掉,否则可能会报依赖问题

解压并编译安装 tar -zxvf zabbix-4.0.4.tar.gz cd zabbix-4.0.4/ 建立编译安装目录 mkdir -p /data/findsec/zabbix ./configure —prefix=/data/findsec/zabbix —enable-server —enable-agent —enable-java —with-mysql —with-libxml2 —with-unixodbc —with-net-snmp —with-ssh2 —with-openipmi —with-ldap —with-libcurl —with-iconv make && make install /data/findsec/zabbix/sbin/zabbix_server -V

数据库安装 yum install mariadb-server systemctl start mariadb.service systemctl status mariadb.service mysql_secure_installation初始化

创建数据库 mysql -uroot -p create database zabbix character set utf8 collate utf8_bin; grant all privileges on zabbix.* to zabbix@localhost identified by ‘zabbix123’;

导入数据结构 mysql -uzabbix -pzabbix123 zabbix < /root/zabbix-4.0.4/database/mysql/schema.sql mysql -uzabbix -pzabbix123 zabbix < /root/zabbix-4.0.4/database/mysql/images.sql mysql -uzabbix -pzabbix123 zabbix < /root/zabbix-4.0.4/database/mysql/data.sql

修改zabbix server配置 vim /data/findsec/zabbix/etc/zabbix_server.conf DBHost=localhost DBPassword=zabbix123 增加用户 groupadd —system zabbix useradd —system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c “Zabbix Monitoring System” zabbix

启动服务 /data/findsec/zabbix/sbin/zabbix_server -c /data/findsec/zabbix/etc/zabbix_server.conf tail -f /tmp/zabbix_server.log

增加Zabbix镜像源 rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm 安装Zabbix Frontend yum install zabbix-web-mysql 配置Zabbix frontend vim /etc/php.ini

max_execution_time = 300 memory_limit = 128M post_max_size = 16M upload_max_filesize = 2M max_input_time = 300 max_input_vars = 10000 always_populate_raw_post_data = -1 date.timezone = Asia/Shanghai

启动httpd systemctl start httpd.service systemctl status httpd.service http://192.168.10.10/zabbix/setup.php Admin zabbix

安装Zabbix Agent

yum install zabbix-agent systemctl start zabbix-agent.service

vim /data/findsec/zabbix/etc/zabbix_agentd.conf Hostname=Zabbix server 起服务 /data/findsec/zabbix/sbin/zabbix_agent -c /data/findsec/zabbix/etc/zabbix_agentd.conf tailf /tmp/zabbix_agentd.log

  1. <a name="0uYZL"></a>
  2. ## 容器安装
  3. ```bash
  4. 安装好docker后,
  5. docker run --name mysql-server -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" -e MYSQL_ROOT_PASSWORD="zabbix123" -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin
  6. docker run --name zabbix-java-gateway -t -d zabbix/zabbix-java-gateway:latest
  7. docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" -e MYSQL_ROOT_PASSWORD="zabbix123" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysql-server:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 -d zabbix/zabbix-server-mysql:latest
  8. link是用于两个容器间的链接
  9. docker run --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" MYSQL_ROOT_PASSWORD="zabbix123" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:80 -d zabbix/zabbix-web-nginx-mysql:latest
  10. docker rum --name zabbix-agent -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server-mysql" --link zabbix-server-mysql:zabbix-server -d zabbix/zabbix-agent:latest

前端介绍

主机监控部署

  • 拓扑图如下,

image.png

  1. linux安装agent,
  • wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • yum -y install epel-release
  • 添加zabbix镜像源, rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
  • systemctl stop firewalld.service systemctl disable firewalld.service
  • vim /etc/selinux/config yum -y install iptables.service
  • yum -y install zabbix 编辑配置文件, vim /etc/zabbix/zabbix-agentd.conf
    • Server=192.168.10.11 ServerActive=192.168.10.11都是Zabbix Server的地址
    • Hostname=ZabbixAgent_linux 和web前端配置的保持一致
  • systemctl start zabbix-agent.service enable
  • 在web前端配置,Configuration-Hosts-Create host
    • Hosts-Templates-Link new templates,选择”Templates OS Linux” 添加模板
    • Configuration-Host groups,创建主机组
  • Monitoring-Latest data-Hosts,选中要监控的主机,查看相关的监控项
  • 创建监控模板,Configuration-Templates-Create templates
  • 创建监控项,Hosts-applications-items-Create item

    • 接着,就可以把自定义的模板添加关联到对应的Hosts去了

      监控数据查看

  • Latest data 查看主机监控的最新数据

  • Graphs 查看模板graph数据;自定义graph图表
    • 同样是Create graph
  • Screens 查看模板screen数据;自定义screen
  • Web监控 查看web监控数据
  1. 图表中出现中文字体乱码,是因为字体不兼容导致,
  • 先把win上面的字体(例如微软雅黑)拷贝到linux上,
  • cp /tmp/msyh.ttf /usr/share/zabbix/fonts cd /usr/share/zabbix
  • vim include/defines.inc.php 修改 FONT_NAME的相关配置项,改成mysh

    告警触发

    image.png
  1. 增加trigger
  • Trigger-Expression,在表达式进行编写触发条件,
  • {Template_test_linux:net tcp.service[telnet,192.168.10.12,10051].last()}<>0
    • 监听10051端口,连接失败会有警告信息
  1. 触发告警信息

    用户及告警媒介

  2. 用户组管理 创建用户组;组权限配置

  • Administration-User groups
  1. 用户管理 新建用户;将用户加入组中
  • Administration-Users
  1. 告警媒介 自定义告警媒介;用户配置告警媒介
  • 安装邮件服务, yum -y install mailx vim /etc/mail.rc
    • 末尾添加, set from=finsec@163.com
    • set smtp=smtp.163.com
    • set smtp-auth-user=finsec@163.com
    • set smtp-auth-password=test@123 密码需要到163设置-客户端授权密码,进行开启
    • set smt-auth=login
  • 发邮件测试, echo "zabbix@findsec test" | mailx -s "zabbix alert test" findsec@163.com
  • 查看脚本目录, /etc/zabbix/zabbix_server.conf AlertScriptsPath参数,进入目录创建脚本
  • echo “#!/bin/bash\nSENT_TO=$1\nSENT_SUBJECT=$2\nSENT_CONTENT=$3\necho “$SENT_CONTENT” |mailx -s “$SENT_SUBJECT” $SENT_TO” > mail.sh
  • Administration-Media types-Create media type
    • 添加名称,脚本名称,脚本参数
  • Administration-Users-Media,添加媒介
  • Configuration-Actions,Event source选择Triggers,Create action

image.png
image.png
image.png

  • 当主机未处于维护模式,并且触发器级别>=warning的时候,就会给findsec组内的所有用户发送邮件告警
  • 改下脚本内容, yum -y install dos2unix
    1. #!/bin/bash
    2. SENT_TO=$1
    3. SENT_SUBJECT=$2
    4. SENT_CONTENT="/tmp/alert_$$.tmp"
    5. echo "$3">$SENT_CONTENT
    6. dos2unix $SENT_CONTENT
    7. mailx -s "$SENT_SUBJECT" $SENT_TO<$SENT_CONTENT
  1. 告警操作 新建action发送告警;触发告警发送

补充

监控概述

  1. 监控对象
  • 监控对象的理解:CPU是怎么工作的
  • 监控对象的指标:CPU使用率、CPU负载、上下文切换
  • 确定性能基准线:CPU负载多少才算高
  1. 监控范围
  • 硬件监控:服务器的硬件故障
  • 操作系统监控:CPU、内存、IO、进程
  • 应用服务监控
  • 业务监控

    硬件监控

  1. 远程控制卡:DELL服务器:iDRAC;HP:ILO;IBM:IMM
  • linux就可以使用IPMI,BMC控制器;ipmitool
  • 条件:硬件要支持;操作系统 linux;管理工具 ipmitool
  • yum install -y OpenIPMI ipmitool ipmitool help systemctl start impi
  • 使用方式:本地调用;远程调用(IP地址、用户名和密码)
  1. 机房巡检
  2. 路由器和交换机:SNMP监控(简单网络管理协议)
  • yum install -y net-snmp net-snmp-utils yum list | grep snmp
  • 默认监听端口:udp的161
  • OID,linux系统的SNMP Trap
  • snmpget -v2c -c xiaobai 192.168.56.11 +监控项对应的OID

    系统监控

  1. CPU
  • 上下文切换:CPU调度器实施的进程的切换过程
  • 运行队列(负载):负载只是一个参考值
  • 使用率:使用百分比。用户态、内核态
  • 推荐,我是一个线程
  1. 内存
  2. IO Input/Output(网络、磁盘)

CPU

  1. 确定服务类型
  • IO密集型:数据库
  • CPU密集型:web mail
  1. 确定性能基准线
  • 运行队列:1-3线程、1CPU 4核、负载不超过12
  • CPU使用:65%-70% 用户态利用率
    • 30-35% 内核态利用率
    • 0-5% 空闲
  • 上下文切换:
  1. 监控工具:top
  • P,按CPU使用率排序;M,按内存使用率排序
  • yum install -y sysstat
  • top vmstat mpstat

    内存

  1. 按页为单位的,4KB/页
  • 硬盘:以块为单位
  1. 寻址;空间
  2. free -m 直接看 available(centos7)
  3. 内存使用:>80%,告警

  1. yum install -y iotop 按照IO使用百分比进行排序
  • 网络: yum install -y iftop 带宽
    • IBM的nmon 二进制 测试用 ./nmon -c 10 -s 10 -f -m /tmp/ 会生成一个文件
    • 结合nmon Analyser分析上面的生成文件,可生成图表(excel)
  • A^A

    应用监控

  1. nginx:
  • yum install -y gcc gcc-c++ glibc pcre-devel openssl-devel