OpenEuler 22.03 安装 snmptt 1.5(手工安装及自制rpm包)

一、说明

本文原本发布于CSDN,但是近期其吃相越发难看,一方面文章数据越来越假,另一方面高质量的文章会被自动转化为VIP文章。因此将文章搬运至此,希望能够帮助到更多的人。

1.1 背景

snmptt(SNMP Trap Translator)是一个perl语言编写的SNMP Trap消息处理器,官网为:https://snmptt.org/index.shtml,被用于zabbix等监控工具。该工具最新版为2022年发布的1.5版本。

如果使用redhat系,新增EPEL仓库仓库后可以直接yum安装1.4.2版本,非常方便。但是由于centos停止支持的缘故,转向OpenEuler,研究一下snmptt的安装并记录如下。

1.2 环境

  • 操作系统:OpenEuler 22.03
  • snmptt:1.5

二、准备工作

2.1 依赖包

根据实际测试,在OpenEuler 22.03系统上,需要安装这些包:

复制代码
yum install -y net-snmp perl-Config-IniFiles perl-Net-IP

与官网说明不同的是,perl-Net-IP在官方文档中是一个可选包,但是实际运行时是必须的,而net-snmp-utils在文档中是必须的,实际上却不是。

2.2 selinux

关闭selinux

复制代码
setenforce 0

三、手工部署

3.1 snmptt安装

1. 下载并解压

从github主页 https://github.com/snmptt/snmptt/releases 下载并解压:

复制代码
tar -zxf snmptt_1.5.tgz
cd snmptt_1.5
cp snmptt /usr/sbin/
chmod +x /usr/sbin/

2. 创建账号

复制代码
adduser -r snmptt

3. 创建配置文件

复制代码
mkdir /etc/snmptt
chown -R snmptt:snmptt /etc/snmptt
chmod 755 /etc/snmptt
cp snmptt.ini /etc/snmptt/
touch /etc/snmptt/snmptt.conf

4. 创建日志文件

复制代码
mkdir /var/log/snmptt
chown -R snmptt:snmptt /var/log/snmptt
chmod -R 750 /var/log/snmptt

mkdir /var/spool/snmptt/
chown -R snmptt:snmptt /var/spool/snmptt
chmod -R 750 /var/spool/snmptt

5. 注册为系统服务

复制代码
cp snmptt.service /usr/lib/systemd/system/snmptt.service
chmod -x /usr/lib/systemd/system/snmptt.service
systemctl daemon-reload

6. 配置日志回滚

复制代码
cp snmptt.logrotate /etc/logrotate.d/snmptt

7. 测试启动

使用snmptt --daemon或者systemctl start snmptt启动snmptt服务,如果启动无报错,可以检查系统日志/var/log/messages。

3.2 snmptthandler安装

在snmptt压缩包内:

复制代码
cp snmptthandler /usr/sbin/
chmod +x /usr/sbin/snmptthandler

可以使用/usr/sbin/snmptthandler命令尝试启动,检查有无缺失的perl包

3.3 配置

1. snmptrapd.conf

修改/etc/snmp/snmptrapd.conf内容为:

(1)如果snmptt运行于daemon模式:

复制代码
disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

(2)如果snmptt运行于standalone模式:

复制代码
disableAuthorization yes
traphandle default /usr/sbin/snmptt

按照文档配置,则snmptt运行于standalone模式。

2. snmptrapd.service

修改并覆盖snmptrapd.service文件:

复制代码
systemctl edit --full snmptrapd.service

修改Environment=OPTIONS="-Lsd"Environment="OPTIONS=-Lsd -On"

3. snmptt.ini

编辑/etc/snmptt/snmptt.ini,修改trap消息的时间日期格式:

复制代码
date_time_format= %H:%M:%S %Y\/%m\/%d

4. snmptt.conf

修改/etc/snmptt/snmptt.conf内容为:

复制代码
EVENT general .* "Default" Normal
FORMAT ZBXTRAP $aA $ar $+*

其中:

"event_name"为自定义的event_name,.*为event_OID,意为捕获任何oid。
"FORMAT ZBXTRAP aA ar" 为固定格式,$+*代表展开所有绑定变量

3.4 启动服务

复制代码
systemctl start snmptrapd
systemctl start snmptt

可通过ps -ef | grep snmp检查snmptrapd和snmptt的进程

3.5 测试

通过snmptrap命令向本地环回地址发送trap报文,v1版本和v2c版本有不同报文格式:

  1. snmptrap v1版本

    snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring"

  2. snmptrap v2c版本

    snmptrap -v 2c -c public 127.0.0.1 '12345' .1.3.6.1.4.1.2022.5.24.1 .1.3.6.1.4.1.2022.5.24.2.1 s "value1" .1.3.6.1.4.1.2022.5.24.2.2 s "value2" .1.3.6.1.4.1.2022.5.24.2.3 s "value3"

其中12345是时间,1.3.6.1.4.1.2022.5.24.1为event_OID。

如果一切正常,则在/var/log/snmptt/snmptt.log文件中可以看到如下日志:

复制代码
23:08:22 2025/10/30 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "Default" localhost - ZBXTRAP 127.0.0.1 127.0.0.1 .1.3.6.1.6.3.1.1.5.3:teststring
23:08:24 2025/10/30 .1.3.6.1.4.1.2022.5.24.1 Normal "Default" localhost - ZBXTRAP 127.0.0.1 127.0.0.1 .1.3.6.1.4.1.2022.5.24.2.1:value1 .1.3.6.1.4.1.2022.5.24.2.2:value2 .1.3.6.1.4.1.2022.5.24.2.3:value3

四、创建rpm包

从上述手动安装步骤可以看出,snmptt实际上是perl脚本,连源代码编译都不涉及,基本上只涉及文件的操作,并且依赖的包也不多,整个安装过程非常简单。我们可以将其制作成一个rpm包简化安装。

4.1 准备源代码压缩包

首先从Github主页下载snmptt的源代码压缩包snmptt_1.5.tgz,压缩包中包含了全量perl脚本工具。按照rpmbuild的习惯,需要先解压压缩包,对文件夹改名后重新压缩。

复制代码
tar -zxf snmptt_1.5.tgz
cp -r snmptt_1.5 snmptt-1.5
tar -zcf snmptt-1.5.tar.gz snmptt-1.5/

4.2 准备rpmbuild目录

由于snmptt的安装过程中涉及创建用户和不少系统文件操作,因此需要root权限。在root用户下使用rpmdev-setuptree命令,创建/root/rpmbuild目录,将源代码压缩包放入SOURCES目录下

复制代码
mv snmptt-1.5.tar.gz ~/rpmbuild/SOURCES/

4.3 编辑spec文件

编辑SPECS/snmptt.spec

复制代码
Name:           snmptt
Version:        1.5 
Release:        1%{?dist}
Summary:        SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program
License:        GPLv3+ 
Source0:        %{name}-%{version}.tar.gz
BuildRequires:        net-snmp, perl-Config-IniFiles, perl-Net-IP, perl-Text-ParseWords, perl-Time-HiRes, perl-Text-Balanced

%description
SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program

%prep
%setup -q

%build

%install
%__mkdir_p $RPM_BUILD_ROOT/%{_sbindir}
%__install -m 0755 %{name} $RPM_BUILD_ROOT/%{_sbindir}/
%__mkdir_p $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__chmod 755 $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__install -m 0644 %{name}.ini $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/
%__install -m 0644 examples/%{name}.conf.generic $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/%{name}.conf
%__mkdir_p $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__chmod -R 750 $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__mkdir_p $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__chmod -R 750 $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__mkdir_p $RPM_BUILD_ROOT/%{_unitdir}
%__install -m 0644 %{name}.service $RPM_BUILD_ROOT/%{_unitdir}/
%__mkdir_p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/
%__install -m 0644 %{name}.logrotate $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/%{name}
%__install -m 0755 snmptthandler $RPM_BUILD_ROOT/%{_sbindir}/snmptthandler

%pre
adduser -r %{name} > /dev/null 2>&1 || :

%files
%attr(0755, %{name}, %{name}) %{_sbindir}/%{name}
%attr(0755, %{name}, %{name}) %{_sbindir}/snmptthandler
%attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/%{name}.ini
%attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/%{name}.conf
%attr(0644, %{name}, %{name}) %{_unitdir}/%{name}.service
%attr(0644, %{name}, %{name}) %{_sysconfdir}/logrotate.d/%{name}
%attr(0750, %{name}, %{name}) %{_localstatedir}/spool/%{name}
%attr(0750, %{name}, %{name}) %{_localstatedir}/log/%{name}

%post
systemctl daemon-reload

%preun
if [ $1 -eq 0 ]; then
    systemctl stop snmptt > /dev/null 2>&1 || :
    systemctl disable snmptt > /dev/null 2>&1 || :
fi

%postun
if [ $1 -eq 0 ]; then
    userdel snmptt > /dev/null 2>&1 || :
fi

4.4 创建

至此可以使用rpmbuild命令进行rpm包的创建,但是如果直接运行会报错空 %files 文件 /root/rpmbuild/BUILD/snmptt-1.5/debugfiles.list

网络上提供了两种方案解决:

  1. rpmbuild -bb SPECS/snmptt.spec --nodebuginfo
  2. echo "%debug_package %{nil}" >> /usr/lib/rpm/macros
    我使用了第一种方法解决。

五、后记

  1. 相比于1.4.2版本,1.5在使用感知上最大的差异就是配置文件的位置从/etc/snmp/改为了/etc/snmptt/目录,得以和net-snmp的配置文件隔离。
  2. 官方文档说明,snmptt 1.5基于Net-SNMP 5.7.x版本进行过测试,而OpenEuler的官方仓库中net-snmp版本为5.9.1,兼容性有待验证。
  3. 虽然OpenEuler的默认源没有snmptt,但是社区有提供1.4.2版本的的包,可以尝试一用
相关推荐
努力进修7 小时前
openEuler 全场景操作系统下 cpolar 内网穿透的价值深挖与协同优化
cpolar·openeuler
virtualzzf3 天前
使用rpmbuild将源代码制成rpm包
linxu
微学AI4 天前
深入评测openEuler 24.03 LTS SP2:在云原生时代构筑高性能的应用与实战操作
云原生·openeuler
熊文豪7 天前
openEuler 云原生实战:部署高性能 Redis 集群与压测分析
数据库·redis·云原生·openeuler
byte轻骑兵7 天前
WSL+openEuler云原生实践:Docker全流程部署与多容器编排深度评测
docker·云原生·容器·openeuler
熊文豪8 天前
在 openEuler 上部署 Kafka 集群:深度性能评测与优化指南
分布式·kafka·openeuler
曾凡宇先生25 天前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
趴着喝可乐2 个月前
openEuler2403安装部署Kafka
kafka·openeuler
趴着喝可乐2 个月前
openEuler2403安装部署Kafbat
kafka·openeuler·kafbat