snmpd.conf的基础配置
2013 年 2 月 17 日 IT辰逸 CentOS, Linux, 0
当下的 SNMP 服务器通常用来被诸如 Nagios、Cacti、Zabbix 等监控软件收集数据,SNMP 的很多高级特性用的不是特别频繁。因而只需对 SNMP 进行一些简单、基础的配置以满足各种监控软件的需求。
通常 SNMP 服务的配置文件位于 /etc/snmp/snmpd.conf,先来看一下这个文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
####
# First, map the community name “public” into a “security name”
# sec.name source community
com2sec
notConfigUser
default
public
#定义community名称为 public,映射到安全名 notConfigUser。
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group
notConfigGroup
v1
notConfigUser
#定义安全用户名notConfigUser映射到notConfigGroup组。
group
notConfigGroup
v2c
notConfigUser
####
# Third, create a view for us to let the group have rights to: #定义一个view,来决定notConfigUser可以操作的范围。
# Make at least snmpwalk -v 1 localhost -c public system fast again. #定义可查看的snmp的范围。
# name incl/excl subtree mask(optional)
view
systemview
included
.
1.3.6.1.2.1.1
view
systemview
included
.
1.3.6.1.2.1.25.1.1
view
all
included
.
1
####
# Finally, grant the group read-only access to the systemview view. #给notConfigGroup组所定义view名 all 以只读权限。
# group context sec.model sec.level prefix read write notif
access
notConfigGroup
“”
any
noauth
exact
all
none
none
#access notConfigGroup “” any noauth exact mib2 none none
# —————————————————————————–
# Here is a commented out example configuration that allows less
# restrictive access.
# YOU SHOULD CHANGE THE “COMMUNITY” TOKEN BELOW TO A NEW KEYWORD ONLY
# KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
# SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.
## sec.name source community
#com2sec local localhost COMMUNITY
#com2sec mynetwork NETWORK/24 COMMUNITY
## group.name sec.model sec.name
#group MyRWGroup any local
#group MyROGroup any mynetwork
#
#group MyRWGroup any otherv3user
#…
## incl/excl subtree mask
#view all included .1 80
## -or just the mib2 tree-
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
## context sec.model sec.level prefix read write notif
#access MyROGroup “” any noauth 0 all none none
#access MyRWGroup “” any noauth 0 all all all
|
有以上这些配置其实已经能够基本满足大多数需求了,还算是比较简单的,配置 SNMP 可以参考以下步骤:
1. 首先定义一个共同体名称(community),这里是 public ,及可以访问这个 public 的用户名(sec name),这里是 notConfigUser 。public 相当于用户 notConfigUser 的密码。
1
2
|
# sec.name source community
com2sec
notConfigUser
default
public
|
2. 定义一个组名(groupName)这里是 notConfigGroup,及组的安全级别,把 notConfigGroup 这个用户加到这个组中。
1
2
3
|
# groupName securityModel securityName
group
notConfigGroup
v1
notConfigUser
group
notConfigGroup
v2c
notConfigUser
|
3. 定义一个可操作的视图(view)名, 这里是 all,范围是 .1。
1
2
|
# name incl/excl subtree mask(optional)
view
all
included
.
1
|
4. 定义 notConfigUser 这个组在 all 这个视图范围内可做的操作,这时定义了 notConfigUser 组的成员可对 .1 这个视图做只读操作。
1
2
|
# group context sec.model sec.level prefix read write notif
access
notConfigGroup
""
any
noauth
exact
all
none
none
|
这样对 snmpd.conf 文件就基本完成了,用 service snmpd restart 重启 snmpd 服务。
之后,我们需要一个测试,验证 SNMP 配置的正确性。在监控主机中执行以下命令:
1
2
3
4
5
6
7
8
9
|
[
root
@
chenyi
Packages
]
# snmpwalk -v 1 192.168.1.220 -c public system
Timeout
:
No
Response
from
192.168.1.220
[
root
@
chenyi
Packages
]
# snmpwalk -v 1 192.168.1.220 -c public system
SNMPv2
-
MIB
::
sysDescr
.
0
=
STRING
:
Linux
chenyi
2.6.32
-
279.el6.i686
#1 SMP Fri Jun 22 10:59:55 UTC 2012 i686
SNMPv2
-
MIB
::
sysObjectID
.
0
=
OID
:
NET
-
SNMP
-
MIB
::
netSnmpAgentOIDs
.
10
DISMAN
-
EVENT
-
MIB
::
sysUpTimeInstance
=
Timeticks
:
(
797
)
0
:
00
:
07.97
SNMPv2
-
MIB
::
sysContact
.
0
=
STRING
:
Root
<
root
@
localhost
>
(
configure
/
etc
/
snmp
/
snmp
.
local
.
conf
)
SNMPv2
-
MIB
::
sysName
.
0
=
STRING
:
chenyi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
|
上述信息说明 SNMP 已经正常工作了。
现在我们在目标主机上来写一些脚本来获取 Memory、CPU、DiskIO 等状态。
Memory 脚本:
1
2
3
|
#!/bin/sh
/
usr
/
bin
/
free
-
m
|
grep
Mem
|
awk
'{print $4}'
/
usr
/
bin
/
free
-
m
|
grep
Mem
|
awk
'{print $2}'
|
1
2
3
|
[
root
@
chenyi
~
]
# sh memory.sh
809
1006
|
CPU 脚本:
1
2
3
4
5
|
#!/bin/sh
idle
=
`
sar
-
u
1
3
|
grep
Average
|
awk
'{print $6}'
`
used
=
`
echo
"101 - $idle"
|
bc
-
l
-
s
`
echo
$
used
echo
$
idle
|
Disk I/O 脚本:
1
2
3
4
5
|
#!/bin/sh
used1
=
`
sar
-
d
1
3
|
tail
-
1
|
awk
'{print $4}'
`
used2
=
`
echo
"$used1 / 2"
|
bc
-
l
`
echo
$
used2
echo
$
used2
|
现在我们已经能得到这数据了,怎么才能让监控主机通过 snmpd 得到这些数据呢?可以在目标主机的 /etc/snmp/snmpd.conf 文件中加入这些配置:
1
2
3
|
exec
.
1.3.6.1.4.1.2021.53
memory
/
bin
/
sh
/
root
/
memory
.
sh
exec
.
1.3.6.1.4.1.2021.54
cpu
/
bin
/
sh
/
root
/
cpu
.
sh
exec
.
1.3.6.1.4.1.2021.55
disk
/
bin
/
sh
/
root
/
disk
.
sh
|
1
2
3
|
[
root
@
chenyi
~
]
# service snmpd restart
停止
snmpd:
[确定
]
正在启动
snmpd:
[确定
]
|
这样在监控主机上运行:
[root@chenyi ~]# snmpwalk -v 1 192.168.1.220 -c public .1.3.6.1.4.1.2021.53
1
2
3
4
5
6
7
|
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.1.1
=
INTEGER
:
1
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.2.1
=
STRING
:
"memory"
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.3.1
=
STRING
:
"/bin/sh /root/memory.sh"
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.100.1
=
INTEGER
:
0
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.101.1
=
STRING
:
"442"
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.101.2
=
STRING
:
"1006"
UCD
-
SNMP
-
MIB
::
ucdavis
.
53.102.1
=
INTEGER
:
0
|
其中 UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: “442″ 中的 442 就是 mem.sh 输出的第一个数据,1006 是 mem.sh 输出的第二个数据。
略作修改:(此处参照其他文章)
1
|
[
root
@
chenyi
~
]
# snmpwalk -v 1 192.168.1.220 -c public .1.3.6.1.4.1.2021.53 | grep 53.101 | awk -F\" '{print $2}'
|
1
2
|
443
1006
|
我们已经通过 snmpd 从监控主机上得到了目标主机上内存使用状态的两个参数,其它脚本也是一样的