防伪码: 他日若遂凌云志 敢笑黄巢不丈夫
操作系统 | CentOS Linux release 7.5.1804 (Core) |
Nginx | nginx/1.16.1 |
PHP | 7.2.24 |
MYSQL | 5.7.2 |
Zabbix | 5.0.2 |
第一章 zabbix 监控
1.1 为什么要监控
在需要的时刻, 提前提醒我们服务器出问题了
当出问题之后, 可以找到问题的根源
网站 / 服务器 的可用性
1.1.1 网站可用性
在软件系统的高可靠性 (也称为可用性, 英文描述为 HA,High Available) 里有个衡量其可靠性的标准 --X 个 9, 这个 X 是代表数字 3~5.X 个 9 表示在软件系统 1 年时间的使用过程中, 系统可以正常使用时间与总时间 (1 年) 之比, 我们通过下面的计算来感受下 X 个 9 在不同级别的可靠性差异.
1 个 9:(1-90%)*365=36.5 天, 表示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 36.5 天
2 个 9:(1-99%)*365=3.65 天 , 表示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 3.65 天
3 个 9:(1-99.9%)*365*24=8.76 小时, 表示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 8.76 小时.
4 个 9:(1-99.99%)*365*24=0.876 小时 = 52.6 分钟, 表示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 52.6 分钟.
5 个 9:(1-99.999%)*365*24*60=5.26 分钟, 表示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 5.26 分钟.
6 个 9:(1-99.9999%)*365*24*60*60=31 秒, 示该软件系统在连续运行 1 年时间里最多可能的业务中断时间是 31 秒
1.2 监控什么东西
监控一切需要监控的东西, 只要能够想到, 能够用命令实现的都能用来监控
1.3 怎么来监控
1.3.1 远程管理服务器
如果想远程管理服务器就有远程管理卡, 比如 Dell idRAC,HP ILO,IBM IMM
1.3.2 监控硬件
查看硬件的温度 / 风扇转速, 电脑有鲁大师, 服务器就有 ipmitool.
使用 ipmitool 实现对服务器的命令行远程管理
yum-y install OpenIPMI ipmitool ->IPMI 在物理机可以成功,虚拟机不行 [root@KVM ~] ipmitool sdr type Temperature Temp | 01h | ns | 3.1 | Disabled Temp | 02h | ns | 3.2 | Disabled Temp | 05h | ns | 10.1 | Disabled Temp | 06h | ns | 10.2 | Disabled Ambient Temp | 0Eh | ok | 7.1 | 22 degrees C Planar Temp | 0Fh | ns | 7.1 | Disabled IOH THERMTRIP | 5Dh | ns | 7.1 | Disabled CPU Temp Interf | 76h | ns | 7.1 | Disabled Temp | 0Ah | ns | 8.1 | Disabled Temp | 0Bh | ns | 8.1 | Disabled Temp | 0Ch | ns | 8.1 | Disabled |
1.3.3 查看 CPU 相关
lscpu、uptime、top、htop vmstat mpstat 其中 htop 需要安装,安装依赖与 epel 源。 [znix@clsn ~]$lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 |
1.3.4 内存够不够可以用
free [znix@clsn ~]$free -h total used free shared buffers cached Mem: 996M 867M 128M 712K 145M 450M -/+ buffers/cache: 271M 725M Swap: 1.0G 0B 1.0G |
1.3.5 磁盘剩多少写的快不快可以用
df、dd、iotop [znix@clsn ~]$df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 24G 15G 62% / tmpfs 499M 20K 499M 1% /dev/shm /dev/vdb1 20G 4.4G 15G 24% /data |
1.3.6 监控网络
iftop nethogs iftop 监控主机间流量 -i 指定监控网卡 nethogs 监控进程流量 |
1.4 监控工具总览
mrtg 流量监控出图
nagios 监控
cacti 流量监控出图
zabbix 监控 + 出图
1.5 zabbix 介绍
Zabbix 是由 Alexei Vladishev 开发的一种网络监视, 管理系统, 基于 Server-Client 架构. 可用于监视各种网络服务, 服务器和网络机器等状态.
使用各种 Database-end 如 MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 储存资料. Server 端基于 C 语言, web 管理端 frontend 则是基于 PHP 所制作的. Zabbix 可以使用多种方式监视. 可以只使用 Simple Check 不需要安装 Client 端, 亦可基于 SMTP 或 HTTP ... 各种协定做死活监视.
在客户端如 UNIX, Windows 中安装 Zabbix Agent 之后, 可监视 CPU Load, 网络使用状况, 硬盘容量等各种状态. 而就算没有安装 Agent 在监视对象中, Zabbix 也可以经由 SNMP,TCP,ICMP, 利用 IPMI,SSH,telnet 对目标进行监视.
另外, Zabbix 包含 XMPP 等各种 Item 警示功能.
1.5.1 zabbix 的组成
zabbix 官网: https://www.zabbix.com
zabbix 主要由 2 部分构成 zabbix server 和 zabbix agent
zabbix proxy 是用来管理其他的 agent, 作为代理
1.5.2 zabbix 监控范畴
硬件监控 :Zabbix IPMI Interface
系统监控 :Zabbix Agent Interface
Java 监控: ZabbixJMX Interface
网络设备监抟: Zabbix SNMP Interface
应用服务监控: Zabbix Agent UserParameter
MySQL 数据库监控: percona-monitoring-pldlgins
URL 监控: Zabbix Web 监控
第二章安装 zabbix
2.1 关闭防火墙
systemctl stop firewalld.service 停止 firewalld 服务 systemctl disable firewalld.service 设置开机默认不启动 |
2.2 关闭 selinux
getenforce 查看状态 vim /etc/sysconfig/selinux 开机不启动 SELINUX=disabled 生产环境单独在防火墙上开启端口和策略 |
2.3 安装 zabbix5.0 源
2.3.1 安装依赖
yum -y install openssl OpenIPMI-libs unixODBC libaio iksemel fping net-snmp net-snmp-utils mysql perl-DBI curl libcurl-devel net-snmp-devel libssh2 libssh2-devel libxml2 libxml2-devel |
2.3.2 安装数据库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpmyum clean all * 清理 yum 缓存 |
2.4 安装 zabbix5.0 服务端和客户端
yum install zabbix-server-mysql zabbix-agent 国外源安装可能比较慢或者出错,多试几次 |
2.5 安装 CentOS SCLo RH 存储库:
yum install centos-release-scl 编辑配置文件 /etc/yum.repos.d/zabbix.repo [zabbix-frontend] ... Enabled=1 ... 安装 Zabbix 前端包 yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl |
2.6 安装并配置数据库
2.6.1 安装 mysql5.7
安装 MySQL 服务 yum install rh-mysql57-mysql rh-mysql57-mysql-server rh-mysql57-mysql-devel 配置 MySQL 服务 vim /etc/opt/rh/rh-mysql57/my.cnf character_set_server = utf8 vim /etc/profile export PATH=/opt/rh/rh-mysql57/root/bin:$PATH source /etc/profile 启动服务 systemctl start rh-mysql57-mysqld |
2.6.2 创建初始数据库
mysql -uroot -p password mysql> create database zabbix character set utf8 collate utf8_bin; mysql> create user zabbix@localhost identified by 'Password@123.'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> quit; |
2.6.3 导入初始架构和数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix 提示输入的密码为:password |
2.6.4Zabbix server 配置数据库
vim /etc/zabbix/zabbix_server.conf DBPassword=password DBSocket=/var/lib/mysql/mysql.sock |
2.7 配置文件
vim /etc/opt/rh/rh-php72/php.ini soap.wsdl_cache_enabled=1 max_input_time = 600 max_execution_time = 300 date.timezone = Asia/Shanghai post_max_size = 32M memory_limit = 128M mbstring.func_overload = 1vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf [zabbix] user = apache group = apache listen = /var/opt/rh/rh-php72/run/php-fpm/zabbix.sock listen.acl_users = apache listen.allowed_clients = 127.0.0.1 listen.mode = 0666 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 php_value[session.save_handler] = files php_value[session.save_path] = /var/opt/rh/rh-php72/lib/php/session/ 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[max_input_vars] = 10000 ; php_value[date.timezone] = Europe/Riga vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/opt/rh/rh-nginx116/log/nginx/error.log; pid /var/opt/rh/rh-nginx116/run/nginx/nginx.pid; # Load dynamic modules. See /opt/rh/rh-nginx116/root/usr/share/doc/README.dynamic. include /opt/rh/rh-nginx116/root/usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local]"$request"' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent""$http_x_forwarded_for"'; access_log /var/opt/rh/rh-nginx116/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/opt/rh/rh-nginx116/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/opt/rh/rh-nginx116/nginx/conf.d/*.conf; } vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf server { listen 80; # server_name example.com; root /usr/share/zabbix; index index.php; location = /favicon.ico { log_not_found off; } location / { try_files $uri $uri/ =404; } location /assets { access_log off; expires 10d; } location ~ /\.ht { deny all; } location ~ /(api\/|conf[^\.]|include|locale) { deny all; return 404; } location ~ [^/]\.php(/|$) { fastcgi_pass unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } |
2.8 启动 Zabbix5.0
systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm rh-mysql57-mysqld |
2.9 配置 Zabbix 前端
第三章 基础功能使用
3.1 Linux 主机监控
Linux 主机的话还是比较好处理的, 无论是安装 agent 代理程序还是使用 snmp, 都是比较方便的
基础配置: 关闭 selinux, 关闭防火墙或者打开 161 端口.
3.1.1 安装
安装 net-snmp yum install -y net-snmp |
3.1.1.1 修改配置文件
vim /etc/snmp/snmpd.conf sec.name source community com2sec notConfigUser default public # 社区名称定义为 public view systemview included .1 # 添加一个采集项. 1,意味着可以采集到所有 mib tree 的信息 view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1 |
3.1.3 启动服务
systemctl start snmpd.service netstat -lntup|grep 161 udp 0 0 0.0.0.0:161 0.0.0.0:* 6711/snmpd |
3.1.4 在 zabbix server 上测试
snmpwalk -v 2c -c zabbix 222.29.77.167|wc -l 12235 # 这里取到了 12235 项 |
nmap 端口扫描 yum install -y nmap nmap -sU 目标 IP-p 161 |
3.1.5 添加 Linux 主机
配置 -- 主机 -- 创建主机 -- 移除 interface 的客户端 -- 添加 SNMP 客户端
-- 填写主机名称, 可见名称, 群组, IP 地址, 如图所示:
点击添加, 然后等待 1 分钟, 等待图标变成绿色即正常, 如图所示:
3.2 Web 监控
通过 zabbix 做 Web 监控, 不仅仅可以监控到站点的响应时间, 还可以根据站点返回的状态码或响应时间做报警设置, 比如说对某个 url 进行监控, 当访问返回的状态码是非 200 状态时都报警(创建触发器即可). 下面简单介绍下监控设置
3.2.1 创建监控模板
点击配置 -- 模板 -- 创建模板
3.2.2 创建 Web 监控场景
监控网页名称便于自己区分
监控的 URL 地址
监控超时时间, 根据自己相应业务动态调整频率
要求返回的状态码, 这里返回 200 为正常, 非 200 报警
3.2.3 查看效果
3.2.4 创建触发器
如果想要实现报警功能还需要我们进行触发器的设置
点击刚才创建的模块 Templates Web status, 选择触发器, 创建触发器
3.3 Windows 主机监控
3.3.1 安装 / 打开 snmp 服务
3.3.2 关闭防火墙
这里只是测试, 实际生产环境环境, 需要开放 snmp 端口 161, 或者对主机的固定 IP 进行放行.
3.3.3 配置 snmp 服务并将其重启
如图所示, 192.168.249.142 是我 zabbix-server 的 IP, 需要配置接受, 上面是本地 snmp 的团体名, 必须配置的与 zabbix-server 上的一样, 否则不能正常的收发数据.
3.3.4 配置检测
在 server 端使用命令检测 client 的配置是否有问题:
无法收集到数据: [root@localhost ~]# snmpwalk -v 2c -c zabbix 192.168.249.128 hrMemory Timeout: No Response from 192.168.249.128 正常情况: [root@localhost ~]# snmpwalk -v 2c -c zabbix 192.168.249.128 hrMemory HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 2096632 KBytes snmpwalk 命令依赖于:net-snmp-utils 软件包,如果提示找不到命令,安装就好了:yum install net-snmp-utils -y,如果检测不通过,则说明 client 配置有问题。 |
3.3.5 创建主机
SNMP 绿色亮起, 说明 sever 与 client 的交互没有问题, ok, 如果一直为灰色, 一般是团体名, 既宏的配置有问题, 检查更改直到这个按钮亮起.(在网络没有问题的前提下)
来源: http://blog.51cto.com/yw666/2512801