zabbix6.4配置执行远程命令

在zabbix6.4版本中(其它版本未测),动作中的操作默认是 “发送消息” ,没有以前版本中执行”远程命令”的选项。


此版本的配置方式发生变化,需要先在 “告警” – “脚本” 中创建脚本。
名称:脚本名,可以中文。
范围:动作操作
类型:脚本
执行在:zabbix客户端
命令:即要执行的命令,比如:

sudo date > /tmp/stat.txt
sudo netstat -tnlp >> /tmp/stat.txt
whoami >> /tmp/stat.txt
sudo docker start rgs

某些命令可能需要sudo权限,需要提前在agent机器上配置好sudoers,这里测试直接给最高。

[root@localhost etc]# cat /etc/sudoers | grep zabbix
zabbix ALL=(ALL) NOPASSWD:ALL

当添加完脚本后,在动作中,操作 里就有了下拉列表,可以选择刚添加的脚本。

# agent配置
在zabbix_agentd.conf中添加配置,允许执行命令。

AllowKey=system.run[*]

重启zabbix agent。

如果不配置,在执行远程命令时会提示 Unsupported item key

正常执行:

MySQL server is not available. Waiting 5 seconds

docker部署zabbix,访问zabbix web页面时,报数据库找不到表,应该是初始化时,sql脚本未导入到zabbix库中。

# 查看zabbix-server日志
docker logs compose_zabbix-server_1 -f

一直报如下错误:

**** MySQL server is not available. Waiting 5 seconds...

# 在 zabbix-server 中用mysql命令连接数据库提示ssl的问题。

ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

# 查看数据库中关于ssl关键词的变量

mysql> show variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.00 sec)

# 添加 skip-ssl 这行

root@d6fcbeeee611:~# cat /etc/mysql/conf.d/docker.cnf 
[mysqld]
skip-host-cache
skip-name-resolve
skip-ssl

重启mysql容器

# 再次查看ssl状态变为关闭

mysql> show variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_crl       |          |
| ssl_crlpath   |          |
| ssl_key       |          |
+---------------+----------+
9 rows in set (0.00 sec)

重新 docker-compose up 导入成功。

ssl参数是启用ssl连接

root@82a862f5f9f5:/# mysqld --verbose --help |grep ssl
  --ssl               Enable SSL for connection (automatically enabled with
                      (Defaults to on; use --skip-ssl to disable.)

zabbix3.4添加nginx活动连接数监控(Active connections)

前提:
nginx编译时添加了

--with-http_stub_status_module


这个参数。
首先配置nginx的监控模块,在虚拟主机中添加一个location

location /status 
{
   allow all;
   stub_status on;
   access_log off;
}


这样访问http://域名/status就可以看到统计信息,如图。

用shell获取active connections这个值。

curl -s http://xxx.com/status | grep "Active connections:" | awk '{print $3}'


配置zabbix 被监控端:
1、添加自定义监控项

[root@sych ~]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d
[root@sych zabbix_agentd.conf.d]# cat nginx.conf 
UserParameter=nginx.active,curl -s "http://xxx.com/status" | grep "Active connections:" | awk '{print $3}'


nginx.active是键值名,给zabbix监控端配置监控项时使用。

2、修改zabbix配置文件
[root@sych ~]# vi /usr/local/zabbix/etc/zabbix_agentd.conf
添加下面3行

# 允许用root执行
AllowRoot=1
# 加载自定义配置文件配置路径
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
#启用用户自定义监控脚本,1启用,0不启用
UnsafeUserParameters=1


重启zabbix_agentd

回到zabbix监控端测试添加的监控键值。
[root@zabbixserver ~]# /usr/local/zabbix/bin/zabbix_get -s ip地址 -p 10050 -k “nginx.active”
10
返回10,取值成功。再去配置zabbix web,添加一个监控项。

 

添加图形:

查看生成图:

配置zabbix监控nginx活动数完成。

zabbix 自定义脚本短信报警

zabbix版本:Zabbix 3.2.4

zabbix服务端:
# 定义脚本路径
编辑 /usr/local/zabbix/etc/zabbix_server.conf
修改:
AlertScriptsPath=/usr/local/zabbix/alertscripts

# 允许用root运行脚本,否则日志出现permission deny
AllowRoot=1
保存退出,重启zabbix_server

shell脚本内容:
#!/bin/bash
token=”123″
templateid=$2

curl “http://ops.xxx.com/admin/sms.php?id=$templateid&token=$token” >> /tmp/sms.log
保存到AlertScriptsPath目录下。
通过zabbix调用shell,触发短信接口发送短信。

zabbix web中配置:

1、添加媒体类型
“管理” -> “报警媒介类型” -> “创建媒体类型”

点击 “添加” 完成

2、添加用户报警媒介
“管理” -> “用户” -> 点击 “{用户名}”(我这里为admin) -> 选择”报警媒介” -> 点击 “添加”

点击”添加”,添加完成,点击 “更新” 保存

3、通过zabbix的”web监测”功能,如果场景步骤失败,就判断网站异常,发送报警短信。

这个地方一定要是Failed step of scenario 场景失败次数,否则根据状态码(Response code for step)判断,无法触发。N是失败次数,0为没有失败。
现在关闭www.rootop.org网站nginx服务,监测到无法连接。

再次开启nginx。配置 动作

这个地方的6是我短信接口模板的id(短信接口自己写的)

收到短信通知

PS:
推测:
{ALERT.SENDTO}  对应 管理-用户-Admin-报警媒介-收件人
{ALERT.SUBJECT} 对应 配置-动作-{动作名称}-操作-默认接收人 (此处中文翻译应该是错的,英文界面此处为 Default subject) 我这里就用这个值代表触发哪个短信发送。
{ALERT.MESSAGE} 报警信息

这个3个参数,分别对应 sms.sh 脚本可能需要的3个参数:收件人地址、主题、内容
在3.0以后zabbix允许自定义参数,所以不会默认传递参数(2.0默认传递这3个参数)。

 

 

 

 

 

 

Zabbix 服务器没有运行,显示信息也许不是当前

有的时候是因为selinux没有关,还有的情况需要查看zabbix server日志。
1、关selinux
setenforce 0 (或者改配置文件永久关掉selinux)

2、查看日志
[root@localhost mysql]# cat /usr/local/zabbix/etc/zabbix_server.conf | grep LogFile
# file – file specified with LogFile parameter
### Option: LogFile
# LogFile=
LogFile=/tmp/zabbix_server.log

去查 /tmp/zabbix_server.log 文件

7189:20180316:102014.462 database is down: reconnecting in 10 seconds
7189:20180316:102024.462 [Z3001] connection to database ‘zabbix’ failed: [2002] Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

可以看到是没有找到mysql.sock文件,我mysql的sock文件在/tmp下,直接软链接一个到日志里的路径即可。