SNMP即使网络管理发出一个request请求,设备response响应
UDP协议上层:
SNMP 161/162
DNS 53 (TCP)
DHCP 67/68
- SNMPv1
只有一种安全级别,团体名,类似于密码很容易被截获 - SNMPv2c
对发出的报文除了目的ip都进行了加密 - SNMPv3
添加安全认证和加密,(路由器而言,不通过认证,不允许你对我监控,对SNMP数据进行加密)支持用户名,密码和community - 监控软件snmpb
可以直接从官网下载,点开树形的mib结构就可以看到对应mib采回的设备信息,配置也很简单,只有2个步骤
1.设置名字,写下要监控的设备,和端口(默认161) - 2.填写设备的community
- 展开树形结构,点击mib就可以查看对应属性信息
zabbix监控
官方文档:https://www.zabbix.com/documentation/
Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
Database Storage:用户存储所有配置信息,以及存储由Zabbix Server收集到的数据;
Web Interface: Zabbix的GUI接口,通常与Server运行在同一台主机上;
Zabbix Proxy:常用于分布监控环境中,代理Server收集部分被监控的监控数据并统一发往Server端;(通常大于500台主机需要使用)
Zabbix Agent:部署在被监控主机上,负责收集本地数据发往Server端或Proxy端;
这里注意用8.0.13创建数据库时
```
1. create database zabbix character set utf8 collate utf8_bin;
2. CREATE USER 'zabbix'@'%' IDENTIFIED BY 'zabbix';(创建用户名密码zabbix/zabbix访问zabbix数据库)
3. GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' WITH GRANT OPTION;(授权zabbix访问)
```
绑定数据库和表结构
```
1.(进入create.sql.gz所在目录 )cd /usr/share/doc/zabbix-server-mysql-3.4.5/ (tab随版本不同改变)
create.sql.gz:自动创建的表结构
2.(通过docker创建表结构)zcat create.sql.gz | mysql -h 10.124.209.10 -P 3306 -uroot -proot zabbix
-h是当前主机,想在哪个主机上建立zabbix数据库表,一定要进入第一步的表结构
3.(默认情况是这种)zcat create.sql.gz |mysql -uroot -p zabbix
```
其他配置
①修改配置文件
vi /etc/zabbix/zabbix_server.conf(修改server=1.1.1.1和localhost的区别是localhost是本地访问,ip是饶了一圈回来访问,就不需要zabbix去找映射的socket)
DBHost=localhost # 数据主机名
DBName=zabbix # 数据库实例
DBUser=zabbix # 用户名
DBPassword=zabbix # 密码
vi /etc/httpd/conf/http.conf里修改前台监听listen的接口,默认是80,会与web端口冲突
改完后要重启:systemctl restart httpd.service
②:偶尔也要查看vi /etc/php.ini
查看状态:systemctl status zabbix-server.service
③:查看log
tail -f /var/log/zabbix/zabbix_server.log
④:重启服务
service httpd restart
service zabbix-agent restart
service zabbix-server restart
⑤:根据文件名查找
find / -name zabbix_server.log
⑥:根据文件查找内容,类似show run
cat /etc/zabbix/zabbix_agentd.conf | grep Hostname
⑦:在linux上查看zabbix版本
注意,当数据库使用docker启动时,zabbix无法获取数据库的socket,所以需要建立软连接,将socket放到指定位置ln -s /root/zabbix_mysql/mysqld.sock /var/lib/mysql/mysql.sock
(后边是zabbix默认去找的socket路径,这些路径在zabbix_server.conf有记录)
此时访问如下网址查看可视化界面
安装:http://10.79.148.117/zabbix/setup.php
登陆:http://10.124.209.11/zabbix/index.php(以管理员和用户两种身份)
安装过程中问题总结
1.zabbix启动时间很慢 ps -ef | grep zabbix:杀掉主进程
卡死是因为红色的zabbix起不来,所以无法start,直接kill -9 红色的zabbix
2.每次重启服务器要setenforce 0
3.安装可视化界面时上海的时区默认被注释掉了,需要将注释取消
安装成功会提示如下界面
此时进入到登录界面,默认的用户名和密码是Admin/zabbix
在server上查看snmp功能是否可行:
snmpwalk -v2c -ccisco 10.124.209.94 .1.3.6.1.2.1.1.5(注意不要忘记".",可以不写默认会去所有的mib)
- zabbix通过脚本实现数据采集
- login拿到权限auth
- 创建group
- 创建host
- 根据host-id拿到interface-id
- 根据interface-id创建item
- 根据item-id获取history
注意事项:
- Since Zabbix 4.0.11, the API history.get has been reworked and is more strict. From now times must be an integer
- 问题描述: skipped: maximum number of running instances reached (1)
原因:执行的进程数超限
解决:scheduler.add_job(要执行的程序, ‘interval’, seconds=60 * 5, max_instances=10) - 问题描述:如果请求history的item是数组的形式,返回个数与请求个数不等
解决:加大时间间隔(time_from,time_till)
若遇到Timeout while connecting to “xxx”
①:先检查snmpb软件是否可以正常取回信息
②:网络层面:在zabbix所在的server上ping 红色的IP地址,若ping不同肯定无法采集snmp信息,
③:zabbix层面:检查snmp community等信息是否正确
④:设备层面:路由器或交换机是否配置了snmp功能
配置命令:snmp-server community cisco RO
postman调用api
通用url:http://10.124.209.10:81/zabbix/api_jsonrpc.php
- 获取auth
POST: body:
{
"jsonrpc":"2.0",
"method":"user.login",
"params":{"user":"Admin","password":"zabbix"},
"auth":null,
"id":0
}
- 创建host
POST body:
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "192.168.1.1",
"interfaces": [
{
"type": 2,
"main": 1,
"useip": 1,
"ip": "10.75.44.123",
"dns": "",
"port": "161"}
],
"groups": [
{
"groupid": "28"
}
]
},
"auth": "de791973822a27349aa579aaab2380c6",
"id": 1
}
- 创建item监控项
POST body:
# type 4:普通snmp类型,15:calculate类型
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "bandwidth_GigabitEthernet5",
"key_": "key_bandwidth_GigabitEthernet5",
"hostid": 10299,
"type": 4,
"value_type": 3,
"interfaceid": 176,
"snmp_community": "cisco",
"snmp_oid": "1.3.6.1.2.1.31.1.1.1.6.5",
"delay": "43200s",
"history":"90d",
},
"auth": "48705211acc878f0b5eb7fe826405cda",
"id": 1
}
- 获取snmp数据
POST body:
# 1:string, 3:int(获取流量)
{
"jsonrpc":"2.0",
"method":"history.get",
"params":{
"history":"1",
"itemids":["28613"],
"hostids": "10263",
"time_from": time_from,
"time_till": time_till
},
"auth":"a6786082887aabf8ca67518a98709bbe",
"id": 1
}