您可以使用Syslog-ng采集日志并通過Syslog協議上傳到日志服務。本文介紹通過Syslog協議將日志上傳到日志服務的操作步驟。
相關限制
配置方式
通常線下的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-ng或sudo apt-get install syslog-ng命令安裝Syslog-ng。
Linux服務器上默認安裝Rsyslog,但是Rsyslog和Syslog-ng無法同時工作,如果您要使用Syslog-ng請先卸載Rsyslog。
打開Syslog-ng配置文件。
通常Syslog-ng配置文件地址為/etc/syslog-ng/syslog-ng.conf。
根據實際情況,配置如下信息,并添加到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 ###
重啟Syslog-ng。
執行sudo /etc/init.d/syslog-ng restart、sudo service syslog-ng restart或sudo systemctl restart syslog-ng命令重啟Syslog-ng。
使用logger命令生成測試日志。
例如執行logger hello world!命令生成日志。
日志樣例
上傳日志后,您需要先配置索引,然后才能在日志服務控制臺中查看日志。具體操作,請參見創建索引。
日志字段說明,請參見RFC5424協議。
為避免泄露AccessKey信息,日志服務默認刪除Logservice字段。
字段名 | 說明 |
__source__ | 原始日志中的hostname字段。 |
__topic__ | 固定為syslog-forwarder。 |
__facility__ | facility(設備、模塊)信息。 |
__program__ | 進程名。 |
__serverity__ | 日志嚴重性。 |
__priority__ | 日志優先級。 |
__unixtimestamp__ | 原始日志中的時間戳(單位:納秒)。 |
content | 原始日志中的msg字段。 |
常見問題與排查
測試日志上傳
您可以使用Netcat測試日志上傳,以檢查網絡是否連通以及AccessKey是否具有上傳權限。
登錄要測試日志上傳的服務器。
執行以下命令安裝Netcat。
sudo yum install nmap-ncat
執行以下命令連接日志服務。
ncat --ssl <yourProject>.<yourEndpoint> 10009
示例命令:
ncat --ssl test-project-1.cn-hangzhou.log.aliyuncs.com 10009
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
在日志服務控制臺預覽日志,驗證日志是否上傳成功。
具體操作,請參見日志預覽。
診斷采集錯誤
如果手動上傳日志失敗,您可通過診斷采集錯誤查看具體報錯信息。更多信息,請參見如何查看Logtail采集錯誤信息。