本文介绍如何通过日志服务控制台创建Logtail配置来采集Syslog。
实现原理
在Linux服务器中,您可以通过rsyslog等syslog agent将本地的syslog数据转发到指定服务器IP地址和端口上。Logtail对指定的地址和端口进行监听,以TCP协议或UDP协议接收转发过来的syslog数据,并根据指定的syslog协议进行解析,提取日志中的facility、tag(program)、severity、content等字段。
前提条件
已创建Project、标准型Logstore。具体操作,请参见创建项目Project、创建Logstore。
本功能只支持Linux系统,并且需要基于最新版本Logtail,如何升级Logtail请参见安装Logtail(Linux系统)。
操作步骤
本文以采集ECS服务器Syslog的为例。
登录日志服务控制台。
在接入数据区域,选择自定义数据插件。
选择目标Project和Logstore,单击下一步。
创建机器组。
如果您已有可用的机器组,请单击使用现有机器组。
如果您还没有可用的机器组,请执行以下操作(以ECS为例)。
在ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建。
具体操作,请参见安装Logtail(ECS实例)。
重要如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。具体操作,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识。
确认参数配置无误后,单击确定。
安装完成后,单击确认安装完毕。
在创建机器组页面,输入名称,单击下一步。
日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组和创建用户自定义标识机器组。
确认目标机器组已在应用机器组区域,单击下一步。
重要创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
在数据源设置页签中,设置配置名称,并复制以下配置脚本粘贴到插件配置输入框中,然后单击下一步。
{ "inputs": [ { "type": "service_syslog", "detail": { "Address": "tcp://0.0.0.0:9000", "ParseProtocol": "rfc3164" } }, { "type": "service_syslog", "detail": { "Address": "udp://0.0.0.0:9001", "ParseProtocol": "rfc3164" } } ] }
脚本中参数说明如下所示:
参数
类型
是否必选
说明
type
string
是
数据源类型,固定为
service_syslog
。Address
string
否
指定Logtail监听的协议、地址和端口,Logtail会根据Logtail配置进行监听并获取日志数据。格式为
[tcp/udp]://[ip]:[port]
。不配置时,默认为tcp://127.0.0.1:9999
,即表示只能接收本地转发的日志。说明Logtail配置中设置的监听协议、地址和端口号必须与rsyslog配置文件设置的转发规则相同。
如果安装Logtail的服务器有多个IP地址可接收日志,可以将地址配置为
0.0.0.0
,表示监听服务器的所有IP地址。
ParseProtocol
string
否
指定解析日志所使用的协议,默认为空,表示不解析。其中:
空:不解析。
rfc3164:指定使用RFC3164协议解析日志。
rfc5424:指定使用RFC5424协议解析日志。
auto:指定Logtail根据日志内容自动选择合适的解析协议。
IgnoreParseFailure
boolean
否
指定解析失败后的操作,不配置时,默认为
true
,表示放弃解析,直接填充所返回的content字段。配置为false
,表示解析失败时丢弃日志。在查询分析配置页签中,单击自动生成索引。此时还不能采集到数据,您只需继续单击下一步完成Logtail采集配置即可。
打开日志服务控制台,在目标Logstore中查看采集到的Syslog数据。更多信息,请参见查询与分析快速指引。
日志字段说明
字段 | 说明 |
| 主机名,如果日志中未提供则获取当前主机名。 |
| 协议中的tag字段。 |
| 协议中的priority字段。 |
| 协议中的facility字段。 |
| 协议中的severity字段。 |
| 日志对应的时间戳。 |
| 日志内容,如果解析失败的话,此字段包含未解析日志的所有内容。 |
| 当前主机的IP地址。 |
| 传输日志的客户端IP地址。 |
更多示例
采集Nginx日志
Nginx支持直接把访问日志以syslog协议转发到指定IP地址和端口。如果您希望将服务器上包括Nginx访问日志在内的所有数据都以syslog形式集中投递到日志服务,您可以根据需求创建Logtail配置进行采集。
创建Logtail采集配置。具体操作,请参见采集Linux系统Syslog。
其中插件配置脚本如下所示。
{ "inputs": [ { "type": "service_syslog", "detail": { "Address": "udp://127.0.0.1:9001", "ParseProtocol": "rfc3164" } } ] }
为Nginx添加一条转发规则。
在Nginx服务器的nginx.conf文件中增加转发规则。更多信息,请参见Nginx官网说明。
例如,在配置文件中增加如下内容。
server { ... # Add this line. access_log syslog:server=127.0.0.1:9001,facility=local7,tag=nginx,severity=info combined; ... }
执行以下命令重启Nginx服务,使配置生效。
sudo service nginx restart
采集防火墙日志
通常防火墙支持将访问日志以syslog协议转发到指定IP地址和端口。如果您希望将防火墙日志以syslog形式集中投递到日志服务,例如构建SIEM,您可以根据需求创建Logtail配置进行采集。
创建Logtail采集配置。具体操作,请参见采集Linux系统Syslog。
其中插件配置脚本如下所示。
{ "inputs": [ { "type": "service_syslog", "detail": { "Address": "udp://0.0.0.0:9001", "ParseProtocol": "rfc3164" } } ] }
根据防火墙说明书为防火墙添加一条转发规则。假设Logtail所在服务器的IP地址为10.20.30.40,示例如下。
问题排查
使用Logtail采集数据后,如果预览页面或查询页面无数据,您可以使用logger命令向本地Logtail发送数据,用于判断是写入端问题、网络问题还是Logtail端问题。
如果本地Logtail能接收到数据,则可能是写入端问题或网络问题。
logger -n localhost -P 9000 -T "This is a TCP syslog message"
logger -n localhost -P 9001 -d "This is a UDP syslog message"
此外,您还可以参见Logtail采集日志失败的排查思路进行排查。