一.简介
日志服务SLS支持通过logtial客户端采集机器组的系统日志到日志服务中,syslog是Linux系统默认的日志守护进程,默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件,在配置采集的过程中,经常会遇到无法采集的情况,本篇文档主要是采集syslog日志的基本概念和采集方法的说明,还有采集失败常见的排查方法。
二.rsyslog配置文件
文件名称:/etc/syslog.conf
文件内容格式:facility.level action
facility代表消息类型,level代表级别,action代表动作
在 /etc/rsyslog.conf 中根据需要修改配置,例如:
$WorkDirectory /var/spool/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
# 定义日志数据的字段
$template ALI_LOG_FMT,"0.1 sys_tag %timegenerated:::date-unixtimestamp% %fromhost-ip% %hostname% %pri-text% %protocol-version% %app-name% %procid% %msgid% %msg:::drop-last-lf%\n"
*.* @@10.101.166.173:11111;ALI_LOG_FMT
配置文件最后一行,. @@10.101.166.173:11111;ALI_LOG_FMT
第一个*代表所有的消息类型
第二个*代表所有级别的消息
@@代表TCP协议(@代表UDP)
10.101.166.173代表该syslog消息要转发到的主机
11111代表11111端口
ALI_LOG_FMT代表模版名称
所以整个一行代表,所有类型、所有级别的消息都通过TCP协议转发到10.101.166.173主机的11111端口,消息内容使用模版 ALI_LOG_FMT
配置文件倒数第二行,$template ALI_LOG_FMT,"0.1 sys_tag %timegenerated:::date-unixtimestamp% %fromhost-ip% %hostname% %pri-text% %protocol-version% %app-name% %procid% %msgid% %msg:::drop-last-lf%n"
$template :模版标识
ALI_LOG_FMT:模版名称
双引号:模版内容
0.1:该日志格式的版本号,Logtail使用该版本号解析user-defined-field 字段。
sys_tag:数据标签,用于寻找Project或Logstore,在控制台中的tag名称
timegenerated:::date-unixtimestamp%:该条日志的时间戳。
%fromhost-ip%:该条日志的对应的机器IP,如果日志中的该字段是 127.0.0.1,最终发往服务端的日志数据中该字段会被替换成 TCP socket的对端地址。
%hostname% ~~ %msgid%:用户自定义字段,中括号表示是可选字段。
%msg:::drop-last-lf%:日志消息正文。
三.ilogtial配置文件
文件名称:/usr/local/ilogtail/ilogtail_config.json
文件格式:
"config_server_address" : "http://logtail.cn-shanghai.log.aliyuncs.com",日志服务访问域名
"data_server_list" :
[
{
"cluster" : "cn-shanghai",所在区域
"endpoint" : "cn-shanghai.log.aliyuncs.com",接入点
}
],
"cpu_usage_limit" : 0.4,CPU占用率阈值
"mem_usage_limit" : 256,常驻内存使用阈值
"max_bytes_per_sec" : 20971520,Logtail发送原始数据的流量限
"buffer_file_num" : 25,缓存文件的最大数目
"buffer_file_size" : 20971520,缓存文件可以实际使用的最大磁盘空间
"streamlog_open" : false,是否打开接受syslog功能(非常重要,和rsyslog功能相关)
"streamlog_pool_size_in_mb" : 50,用于缓存接收到的syslog数据。
"streamlog_rcv_size_each_call" : 1024,linux socket rcv 接口使用的缓冲区大小
"streamlog_formats":[],定义接收到的 syslog 日志解析方式。
"streamlog_tcp_port" : 11111,logtail 用于接收 syslog 日志的 TCP 端口
整个配置文件只有三个参数和rsyslog采集有直接关系,streamlog_open、streamlog_tcp_port和streamlog_formats
streamlog_open:rsyslog采集是否开启
streamlog_tcp_port:ilogtail采集rsyslog日志端口
streamlog_formats:ilogtail采集日志的类型
streamlog_formats:
[
{"version": "2.1", "fields": ["level", "method"]},
{"version": "2.2", "fields": []},
{"version": "2.3", "fields": ["pri-text", "app-name", "syslogtag"]}
]
其中"version": "2.1"对应的/etc/rsyslog.conf 中的0.1,fields对应/etc/rsyslog.conf 中的%hostname% ~~ %msgid%,可以设置提取那个字段,如果将/etc/rsyslog.conf 中的0.1改为2.1,就会匹配到{"version": "2.1", "fields": ["level", "method"]},从而日志服务loghub中提取到用户自定义字段的日志格式就是level和method。
四.日志服务配置步骤
1.安装logtial
2.创建syslog类型配置
3.配置/usr/local/ilogtail/ilogtail_config.json
4./etc/syslog.conf
日志服务官网采集syslog日志文档
五.排查步骤
现象:控制台数据无法采集
1.排查rsyslog服务
(1)按照rsyslog排查,理解rsyslog配置文件,可以很简单的排查syslog.conf配置错误的问题,可以配置多个模版。
(2)排查rsyslog服务是否启动使用service rsyslog status
(3)排查rsyslog监听端口和转发端口
这里可以看到一个rsyslog进程,两个sockets监听,一个监听本机的53552端口,转发到本机的11111端口,另一个监听本机的53554端口,转发到本机的11111端口,有两个是因为syslog.conf中配置了两个规则,而ilogtial服务也启动了三个,两个ESTABLISHED状态的监听与两个ESTABLISHED状态的rsyslog监听在进行数据传输。
2.排查ilogtail服务
(1)排查ilogtial服务运行状态,通过/etc/init.d/ilogtaild status判断ilogtial服务的运行状态。
(2)排查ilogtial日志是否有报错,通过ilogtail.LOG判断ilogtial服务是否有报错。
3.排查机器组状态
(1)排查机器组状态是否是OK状态,可参考文档
4.控制台上检查
(1)可以通过控制台诊断判断问题所在,查到的报错关键字对比文档
(2)通过预览数据看下是否采集到了数据,如果采集到,倒是查询无法查到,应该是没有开启日志索引,或者设置索引错误导致的,可以参考文档