使用Syslog协议上传日志

您可以使用Syslog-ng采集日志并通过Syslog协议上传到日志服务。本文介绍通过Syslog协议将日志上传到日志服务的操作步骤。

相关限制

  • Syslog协议必须为标准的RFC5424协议。如果是其他Syslog协议, 推荐使用采集Syslog

  • 每条日志最大支持64 KB。

  • 为保证数据传输安全性,数据传输必须使用基于TCP的TLS1.2(Transport-level security)。

配置方式

重要

通常线下的VPN、路由器等设备不支持TLS协议或配置RFC5424格式,建议使用Logtail的Syslog插件采集这些设备的数据。具体操作,请参见采集Syslog

使用Syslog协议上传日志时,需配置日志上传地址,格式为Project名称.日志服务Endpoint:Syslog协议端口,例如test-project-1.cn-hangzhou-intranet.log.aliyuncs.com:10009。请根据您的日志服务Project所在地域选择Endpoint。更多信息,请参见服务接入点。Syslog的端口为10009。同时您需要在STRUCTURED-DATA字段中配置日志服务Project、Logstore,阿里云账号AccessKey等信息。

参数

说明

示例

STRUCTURED-DATA

固定为logservice。

logservice

Project

日志服务Project名称,请提前在日志服务中创建Project。具体操作,请参见创建项目Project

test-project-1

Logstore

日志服务Logstore名称,请提前在日志服务中创建Logstore。具体操作,请参见创建Logstore

test-logstore-1

access-key-id

AccessKey ID。建议使用RAM用户的AccessKey。更多信息,请参见授权

LT****9k

access-key-secret

AccessKey Secret。建议使用RAM用户的AccessKey。更多信息,请参见授权

Wp****bA

示例1:使用Syslog-ng采集日志

syslog-ng是基于syslog协议的Unix和类Unix系统的开源软件。您可以执行sudo yum install syslog-ngsudo apt-get install syslog-ng命令安装Syslog-ng。

说明

Linux服务器上默认安装Rsyslog,但是Rsyslog和Syslog-ng无法同时工作,如果您要使用Syslog-ng请先卸载Rsyslog。

  1. 打开Syslog-ng配置文件。

    通常Syslog-ng配置文件地址为/etc/syslog-ng/syslog-ng.conf

  2. 根据实际情况,配置如下信息,并添加到Syslog-ng配置文件的末尾。

    ### Syslog-ng Logging Config for LogService ### 
    template LogServiceFormat { 
        template("<${PRI}>1 ${ISODATE} ${HOST:--} ${PROGRAM:--} ${PID:--} ${MSGID:--} [logservice project=\"test-project-1\" logstore=\"test-logstore-1\" access-key-id=\"<yourAccessKeyId>\" access-key-secret=\"<yourAccessKeySecret>\"] $MSG\n"); template_escape(no); 
    }; 
    destination d_logservice{ 
         tcp("test-project-1.cn-hangzhou.log.aliyuncs.com" port(10009) 
         tls(peer-verify(required-untrusted)) 
         template(LogServiceFormat)); 
    }; 
    log { 
         source(s_sys); # default use s_sys 
         destination(d_logservice); 
    }; 
    ### END Syslog-ng Logging Config for LogService ###
  3. 重启Syslog-ng。

    执行sudo /etc/init.d/syslog-ng restartsudo service syslog-ng restartsudo systemctl restart syslog-ng命令重启Syslog-ng。

  4. 使用logger命令生成测试日志。

    例如执行logger hello world!命令生成日志。

日志样例

上传日志后,您需要先配置索引,然后才能在日志服务控制台中查看日志。具体操作,请参见创建索引

日志字段说明,请参见RFC5424协议

重要

为避免泄露AccessKey信息,日志服务默认删除Logservice字段。

日志样例

字段名

说明

__source__

原始日志中的hostname字段。

__topic__

固定为syslog-forwarder。

__facility__

facility(设备、模块)信息。

__program__

进程名。

__serverity__

日志严重性。

__priority__

日志优先级。

__unixtimestamp__

原始日志中的时间戳(单位:纳秒)。

content

原始日志中的msg字段。

常见问题与排查

  • 测试日志上传

    您可以使用Netcat测试日志上传,以检查网络是否连通以及AccessKey是否具有上传权限。

    1. 登录要测试日志上传的服务器。

    2. 执行以下命令安装Netcat。

      sudo yum install nmap-ncat
    3. 执行以下命令连接日志服务。

      ncat --ssl <yourProject>.<yourEndpoint> 10009

      示例命令:

      ncat --ssl test-project-1.cn-hangzhou.log.aliyuncs.com 10009
    4. Netcat不会自动判断网络连接是否中断,您需要在执行ncat命令后的30秒内,输入要发送的日志,然后按回车键。

      <34>1 2019-03-28T03:00:15.003Z mymachine.example.com su - ID47 [logservice project="<yourProject>" logstore="<yourLogstore>" access-key-id="<yourAccessKeyID>" access-key-secret="<yourAccessKeySecret>"] this is a test message

      示例命令:

      <34>1 2019-03-28T03:00:15.003Z mymachine.example.com su - ID47 [logservice project="trace-doc-test" logstore="doc-test-001-logs" access-key-id="LTAI4***" access-key-secret="HfJEw***"] this is a test message
    5. 在日志服务控制台预览日志,验证日志是否上传成功。

      具体操作,请参见日志预览

      ncat_output

  • 诊断采集错误

    如果手动上传日志失败,您可通过诊断采集错误查看具体报错信息。更多信息,请参见如何查看Logtail采集错误信息