当iMC(作为被管理设备)将自身的系统日志发送到外部的日志服务器(如华三的日志审计系统、ELK、Graylog等)时,其格式遵循标准的Syslog协议格式,并带有H3C的一些特征。
一条典型的iMC syslog消息由以下三个部分组成:
PRI(Priority)部分:<数字>
这是一个尖括号包裹的数字,计算方式为:(Facility * 8) + Severity
。
Facility(设备类型):表示日志来源的类型。iMC通常使用local0
到local7
(数值为16-23)或user
(数值为1)。
Severity(严重等级):表示日志的严重程度。从0-7依次为:
0-Emergency
(紧急)
1-Alert
(警报)
2-Critical
(严重)
3-Error
(错误)
4-Warning
(警告)
5-Notice
(通知)
6-Informational
(信息)
7-Debug
(调试)
示例:<189>
表示 Facility = local7
(23 * 8=184) + Severity = 5-Notice
(5),所以是 184+5=189。
HEADER部分:时间戳 主机名
时间戳:格式通常为 Mmm dd hh:mm:ss
(如 May 27 14:45:20
)。
主机名:发送日志的iMC服务器的主机名或IP地址。
MSG部分:标签: 消息体
标签(TAG):通常包含产生日志的进程名、模块名或功能名(如IMCSNMPAGENT
, IMCCONFIG
, IMCMONITOR
等)。
消息体(Content):具体的日志内容,这是最有价值的信息部分。
一条完整的iMC syslog示例:
<189>May 27 14:45:20 imc-server-01 IMCSNMPAGENT: SNMP agent received a get request from 10.1.1.100, OID: 1.3.6.1.2.1.1.5.0.
解析:
PRI
: <189>
(Local7.Notice)
HEADER
: May 27 14:45:20 imc-server-01
MSG
: IMCSNMPAGENT: SNMP agent received a get request from 10.1.1.100, OID: 1.3.6.1.2.1.1.5.0.
乱码问题几乎可以100%确定是字符编码(Character Encoding)不匹配造成的。
H3C iMC软件运行在Windows Server上,而Windows系统默认的中文编码是 GBK或GB2312。
大多数现代的日志服务器(如Linux系统上的rsyslog/syslog-ng, ELK Stack, Splunk等)默认使用 UTF-8 编码。
当iMC以GBK编码发送包含中文字符的日志消息,而日志服务器试图用UTF-8编码去解码时,就会产生乱码。
您需要确保日志的发送端(iMC)和接收端(日志服务器)使用相同的字符编码。通常有两种思路:
方案一:在iMC上修改发送编码(推荐,一劳永逸)
这是最直接的方法,从源头解决问题。您需要在iMC的信息中心(info-center) 配置中,指定发送到日志主机的日志使用一种兼容性更好的格式。
登录iMC后台:通过SSH或Console口登录iMC服务器(或其托管的基础网络设备)的命令行界面。
进入系统视图:
system-view
配置发送到日志主机的源信息和格式:
info-center loghost 192.168.1.100 facility local7 language english
loghost 192.168.1.100
: 您的日志服务器地址。
facility local7
: 设置设备类型。
language english
:这是关键命令! 强制iMC以英文格式发送日志,从而避免中文字符编码问题。这是最有效的方法。
或者,您可以尝试指定编码格式(如果设备支持),但language english
通常最可靠:
info-center format unicom
unicom
是一种标准格式,兼容性更好。
保存配置:
save
方案二:在日志服务器上配置正确的解码方式
如果无法修改iMC的配置,您可以在日志服务器端指定对来自iMC IP地址的日志流使用GBK编码进行解码。
如果使用 rsyslog
(Linux):
编辑/etc/rsyslog.conf
,在接收规则后添加字符编码设置。
$template myFormat, "%msg%\n"
$DefaultNetstreamDriverCAFile /path/to/cert.pem
module(load="imtcp")
input(type="imtcp" port="514" ruleset="customRuleSet")
ruleset(name="customRuleSet") {
action(type="omfile" file="/var/log/imc.log" template="myFormat" ioBufferSize="64k" fileCreateMode="0644" dirCreateMode="0755")
# 添加字符转换模块和配置 (需要rsyslog支持mmnormalize或mmutf8fix)
# 更简单的方法是使用iconv等外部工具处理,但配置较复杂。
}
对于rsyslog,纯软件解码配置比较复杂,更推荐方案一。
如果使用商业日志审计系统(如H3C CAS):
登录日志审计系统的管理界面,通常在 系统设置
-> 日志源管理`` ->
日志解析策略` 中,可以为指定的日志源(即iMC的IP地址)设置相应的字符编码(如GBK、GB2312或UTF-8)。请将其设置为 GBK** 尝试解决。
方案三:临时验证方法
为了快速验证是否是编码问题,您可以临时将iMC的日志发送配置改为英文环境,如果乱码消失或变为正常的英文字符,即可确认是编码问题。
首选方案:在iMC或其底层系统上执行 info-center loghost x.x.x.x language english
命令,这是解决H3C设备日志中文乱码最常用且有效的方法。
检查确认:使用命令 display info-center
查看当前的日志主机配置状态。
接收端配置:如果无法修改发送端,再考虑在日志审计系统中为iMC这个日志源单独指定字符编码为 GBK。
按照以上步骤操作,您的乱码问题应该能得到解决。
(0)
谢谢
imc默认的编码方式是GBK,可以参考这个案例修改
https://zhiliao.h3c.com/Theme/details/96161
(0)
谢谢
谢谢
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
谢谢