40-zabbix.rst.txt 11.7 KB
zabbix监测系统
===============

安装
--------------------------------

使用docker安装/运行方式(建议使用此方式)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

离线安装包:  smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/(zabbix_agent_proxy_tx1、zabbix_docker)

有docker离线包zabbix_docker,拷贝到有docker的主机上,加载镜像:

.. code-block:: shell

  docker load < postgres9.6.docker.images
  # 屏幕会返回镜像的id,假设是:id-1
  # 给镜像命名
  docker tag id-1 postgres:9.6

  # 下面两个镜像不需要命名,如果load后运行docker images 发现名字和版本都是none,则手动命名
  docker load < zabbix-server-pgsql.docker.images
  # docker tag id-2 zabbix/zabbix-server-pgsql:ubuntu-3.4.13

  docker load < zabbix-web-nginx-pgsql.docker.images 
  # docker tag id-3 zabbix/zabbix-web-nginx-pgsql:ubuntu-3.4.13

  # 加载完毕,docker images应该能显示
  root@user-ubuntu:~/zabbix_docker# docker images
  REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
  zabbix/zabbix-web-nginx-pgsql   ubuntu-3.4.13       bf422197fafe        4 weeks ago         254 MB
  zabbix/zabbix-server-pgsql      ubuntu-3.4.13       af4434f6332b        4 weeks ago         224 MB
  postgres                        9.6                 4023a747a01a        20 months ago       265 MB


本地安装/运行方式(坑多)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

**此方法不同的机器上可能遇到不同的问题,下面的说明只能作为参考。 **

我用网上说的apt-get方式装,无法成功。web界面使用不正常,所以采用源码方式装。zabbix-3.4.13.tar.gz

环境依赖安装按照以下步骤:
https://blog.csdn.net/yannanxiu/article/details/54924198

zabbix-proxy zabbix-server zabbix-front-php 用源码安装,参考:
https://www.zabbix.com/documentation/3.4/zh/manual/installation/install

数据库安装,建立zabbix用户,建立zabbix数据库,运行zabbix-3.4.13/database/postgresql/中的3个脚本。命令行:

.. code-block:: shell

  su postgres
  createdb zabbix
  createuser -SDRP zabbix
  su root
  cat ./zabbix-3.4.13/zabbix-3.4.13/database/postgresql/{schema,images,data}.sql.gz    | psql -h 127.0.0.1 zabbix postgres

或者带界面的postgres客户端做也行。自行选择


zabbix-fornt(web界面)

# 从源码拷贝到apache2
sudo cp -r zabbix-3.4.13/frontends/php/ /var/www/html/zabbix


- zabbix_sender报错

.. code-block:: shell

  root@tegra-ubuntu:/home/ubuntu# zabbix_sender -s "192.168.5.198" -z "192.168.5.133" -k "keytrtest" -o "1133"
  info from server: "processed: 0; failed: 1; total: 1; seconds spent: 0.000026"
  这里failed: 1说明失败了。

注意看item的type必须是Zabbix trapper

server主动获取,在zabbix_agent.conf增加的item的type是Zabbix trapper

配置
----------------------------

zabbix_agent配置
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

**需要在系统配置开机启动**

zabbix_agentd安装包是在tx1上编译的。zabbix_agent_proxy_tx1的install.sh会将配置文件拷贝到
/usr/local/etc/zabbix_agent.conf

.. code-block:: shell

  # 填写主节点ip
  Server=192.168.5.177
  ServerActive=192.168.5.177
  # 主节点运行的是proxy,在默认情况下这样填写
  Hostname=Zabbix proxy
 
  AllowRoot=1

修改完重启进程

zabbix_proxy配置
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

**需要在系统配置开机启动**

zabbix_proxy安装包是在tx1上编译的。zabbix_agent_proxy_tx1的install.sh会将配置文件拷贝到
/usr/local/etc/zabbix_proxy.conf

.. code-block:: shell

  # zabbix_server主机ip
  Server=192.168.9.133
  # 需和zabbix_agent配置的Hostname对应
  Hostname=Zabbix proxy
  # zabbix_proxy数据库目录,如果是使用install.sh脚本安装的,会放在/root/UserApp下。
  DBName=/root/UserApp/zabbix_proxy.db
  # 多长间隔从zabbix_server拉取配置(秒)
  ConfigFrequency=120

  AllowRoot=1

zabbix_server配置
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

**需要在系统配置开机启动**

zabbix_server在docker运行,在每次启动容器的时候会将必要参数传入,zabbix_docker/dockerrun_zabbix.sh已写好,运行即可


使用
------------------------------------------

访问路径: http://ip:9210

第一次运行会有一些额外步骤,按照提示下一步即可

quick start
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

添加proxy,注意Proxy name必须和 zabbix_proxy配置中的Hostname相同。其他配置默认即可。点add添加成功

.. image:: ./images/zabbix-01.png

添加host,Configuration->Hosts->Create host

.. image:: ./images/zabbix-02.png

红框都是需要填写修改的。Groups可以自己建,给设备分组。Monitored by proxy必须选择正确的proxy代理

.. image:: ./images/zabbix-03.png

点Template配置模板,模板决定了有哪些监测项。select选择一个模板,模板后续我们会自己创建,这里先选择Template OS Linux,包含了很多linux的监测项
点小add后再点大add

.. image:: ./images/zabbix-04.png

添加成功

Dashboard可以浏览状态、报警等,Edit dashboard可以自定义。比如Problems中提示我的主机掉线了。

.. image:: ./images/zabbix-05.png

如果想有目的的查询监测项状态,可以打开Monitoring->Lastest data。可以在过滤条件选择感兴趣的主机和检测项组 
可以看到最后的值,可以点Graph看数值历史折线图。

.. image:: ./images/zabbix-06.png

.. image:: ./images/zabbix-07.png


这是最基本的使用,后续添加如何自定义监测项,利用api批量添加主机、动态管理监测项等功能。

模板
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

繁星2代模板已放在sdv上 smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template

自定义监测项
-------------------------------------------------

zabbix的监测项有两种:

1. 上报型

zabbix item type选择 traper。需配合zabbix_sender使用

2. 查询型

zabbix item type选择 agent

如果没有特殊需求,均采用查询型,走vproc流程。

应用程序使用vproc将状态写到文件,zabbix_agentd用vproc查询各状态的值,采用这种方式的原因:

- zabbix的交互压力可控,查询频率在web上配一下就好了。

- 应用程序写状态的操作与zabbix解耦。即使没有zabbix,我们在调试程序时也可以使用vproc,可以用命令行查询检测项的值。有助于调试

vproc后面章节有详细介绍

繁星增加自定义监测项典型流程
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

细节可以自行百度“zabbix增加自定义item”

界面上操作可参考:https://blog.csdn.net/u012062455/article/details/53257059

zabbix_agentd端操作可参考:https://www.cnblogs.com/mingerlcm/p/7754076.html

以繁星2代为例。假设我们要在slave模板中增加vaserver的“进程号”、“是否授权”两个监测项。

1. 在zabbix web端增加检测项

监测项是添加到模板中的,添加后所有使用该模板的主机均生效,修改starnet_tx1_slave_tp模板

- 点击Configuration->Template 。
- 点击starnet_tx1_slave_tp行的items。
- 点右上角的Create item
- 填写具体信息并保存

2. 在zabbix_agentd端配置

- 确保/usr/local/etc/zabbix_agentd.conf中有配置

.. code-block:: shell

  UnsafeUserParameters=1
  Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf

- 在/usr/local/etc/zabbix_agentd.conf.d/vaserver.conf增加命令行,如果没有可新建文件

.. code-block:: shell

  # UserParameter=后面是key值,必须跟web上配置的相同。逗号后面的是查询这个值所执行的指令。
  # 进程号很简单,shell命令就能搞定
  UserParameter=vaserver.pid,pgrep VAServer
  # license状态是需要应用程序开发者写入到vproc系统中(/root/UserApp/vproc/vaserver/license文件内容)的。在这里用vproc工具进行查询。如果没查到,返回0
  UserParameter=vaserver.license,vproc read --key=vaserver.license --value=0

3. 重启zabbix_agentd。过一会在web上就能看到了。

vproc
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

vproc是python编写的工具

类似linux proc系统,应用程序调用vproc脚本将监测项状态值持续更新到指定文件中。外部可读取文件值,得知应用程序的运行情况。


vproc工具有3种用法。

- 写:

.. code-block:: shell

  # 此命令将创建文件 ROOT_VPROC/app/group1/group2/item,文件内容为value1
  ./vproc write --key=app.group1.gourp2.item --value=value1


- 读:

.. code-block:: shell

  # 将ROOT_VPROC/app/group1/group2/item文件内容打印出来
  ./vproc read --key=app.group1.gourp2.item

- 重置:

.. code-block:: shell

  # 删除ROOT_VPROC/app/group1/目录。相当于重置状态值
  ./vproc clean --path=app.group1


所有key值均采用 app.[group1.gourp2...groupn].item方式组织。末端item为文件,记录监测项的值,前面是多级目录。比如key值vaserver.va0.cameraname,记录状态值的文件为VPORC_ROOT/vaserver/va0/cameraname。

单个监测项更新状态频率不宜过快。建议间隔时间1分钟以上

**注意**: 建议在程序(以及能代表一组的流程)启动时、关闭时重置状态,**避免旧的状态值干扰**。拿vaserver举例:

有vaserver.event_count(发出了多少事件) ; vaserver.va0.taskname(分析通道0的任务名称); vaserver.va1.taskname

vaserver启动和退出时应调用

.. code-block:: shell

  ./vproc clean --path=vaserver

vaserver启动、关闭一个va时(假设是编号0)应调用

.. code-block:: shell

  ./vproc clean --path=vaserver.va0


自定义监测项列表
-------------------------------------------------

VAServer
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


+------------------------------------+-------+----------------------------------------+
|                key                 | 类型  |                  说明                  |
+====================================+=======+========================================+
| vaserver.va0.taskname              | Text  | 任务名称                               |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.taskid                | Text  | 任务id                                 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraname            | Text  | 相机名称                               |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraid              | Text  | 相机id                                 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.playok                | int   | 是否点播成功,实际接收到流后再更新状态 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.sendresultcount       | int   | 对外发送了多少条结果,1分钟更新一次    |
+------------------------------------+-------+----------------------------------------+
| vaserver.va[1...n].bigtaskname     | 同va0 | 同va0                                  |
|                                    |       |                                        |
| ...                                |       |                                        |
|                                    |       |                                        |
| vaserver.va[1...n].sendresultcount |       |                                        |
+------------------------------------+-------+----------------------------------------+
| vaserver.license                   | int   | 授权状态,check license后更新          |
+------------------------------------+-------+----------------------------------------+