手工配置
如果您無法通過腳本生成配置文件,這份指導將幫助您通過簡單的復制、粘貼手動完成配置。
假定您已擁有root或sudo權限,是在通用的Linux平台使用5.8.0或更高版本的rsyslog,rsyslog能接收本地系統日志,並通過5140端口與外界連接。
1 配置系統環境
粘貼以下腳本並運行,並且保證 /var/spool/rsyslog 目錄已存在,如果是Ubuntu系統,還需要對目錄進行權限設置。
if [ "$(grep Ubuntu /etc/issue)" != "" ]; then
sudo chown -R syslog:adm /var/spool/rsyslog
fi
2 更新rsyslog配置文件。
打開rsyslog配置文件,它通常在 /etc/ 目錄下
將下列內容粘貼在這個配置文件中
#real tran log $ModLoad imfile #裝載imfile模塊 $InputFilePollInterval 3 #檢查日志文件間隔(秒) $WorkDirectory /var/spool/rsyslog #定義工作目錄。例如隊列文件存儲存儲文件夾。 $InputFileName FILEPATH #讀取日志文件 $InputFileTag APPNAME #日志寫入日志附加標簽字符串 不要添加特殊符號 $InputFileStateFile stat_APPNAME #定義記錄偏移量數據文件名 不要添加特殊符號 $InputFileSeverity info #日志等級 $InputFilePersistStateInterval 20000 #回寫偏移量數據到文件間隔時間(秒) $RepeatedMsgReduction off #關閉重復消息控制 $InputRunFileMonitor #This activates the current monitor. It has no parameters. If you forget this directive, no file monitoring will take place. #https://www.rizhiyi.com/docs/fastuse/tag/ 設置標簽(rsyslog) $template RizhiyiFormat_APPNAME,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [06f69fae723038bbc5d75d29564051ea@32473 tag=\"TAG\"] %msg%\n"# <85> 0 2014-09-14T16:52:59.814155+08:00 macbook my_app - - [91595477-c8e4-42b8-b1f9-696465b422ff@32473 tag="file_upload" tag="my_tag"]
if $programname == 'APPNAME' then @@log.rizhiyi.com:5140;RizhiyiFormat_APPNAME
if $programname == 'APPNAME' then ~

---------------------------------------------------------------對應的單台測試機的配置如下---------------------------------------------------------------------------------------
並替換
- FILEPATH: 需要上傳的日志文件的絕對路徑,必須包含日志文件名。
示例:/var/log/nginx/access.log - APPNAME: 用於標識上傳的唯一應用來源,可用來定義日志分組,這將幫助您有效划分日志,縮小搜索范圍。APPNAME設置正確與否直接影響到后台對日志字段的提取。如果您是VIP用戶,日志易為您定制了日志解析規則,請填寫日志易提供的針對該日志的APPNAME,以使定制的日志解析規則生效。
示例: nginx_access - TAG: 標簽,標識日志的擴展信息,可定義多個標識,這里替換為您自行定義的標簽,可用來定義日志分組,這將幫助您有效划分日志,縮小搜索范圍。
示例: rizhiyi_search
注意:
- 在 /etc/rsyslog.d/ 下的rsyslog配置文件中:
- $InputFileTag定義的APPNAME必須唯一,同一台主機上不同的應用應當使用不同的APPNAME,否則會導致新定義的TOKEN和TAG不生效;
- $template定義的模板名必須唯一,否則會導致新定義的TOKEN和TAG不生效;
- $InputFileStateFile定義的StateFile必須唯一,它被rsyslog用於記錄文件上傳進度,否則會導致混亂;
- 注意:@@log.rizhiyi.com:5140 該值為接收日志的服務器域名或者主機名。默認是log.rizhiyi.com:5140
3 重啟rsyslog
4 驗證
例如,配置文件中的tag字段已修改為"rizhiyi_search",可使用"tag:rizhiyi_search"搜索過去一小時的事件,檢查日志易是否成功接收並正確識別日志,建立索引可能需要幾十秒鍾時間,需要等待幾十秒鍾。
#參考:
http://www.voidcn.com/blog/anghlq/article/p-4958086.html
http://www.wnqzw.com/article/10798.html
附:
日志輸出模板
通過模板可以更具需要來控制日志輸出的樣式。格式如下:
$template <TEMPLATE_NAME>,"text %<PROPERTY>% more text", [<options>]
$template 爲模板指令。<TEMPLATE_NAME> 爲模板名。"" 之間的文本爲模板格式。 被 % 包含的文本對應相關的屬性。<options> 指定修改 模板功能的一些選項,例如 sql 或者 stdsql 會格式化文本爲 SQL 查詢。
動態文件輸出
通過日志和/或系統屬性決定輸出文件名。
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
*.* ?DynamicFile
使用 timegenerated 生成文件名,使用該模板則在前面加上 ?。
其他例子如下:
$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"
根據屬性控制日志輸出格式
使用下面的格式可以對模板之中的屬性做各種修改操作從而定制日志的格式:
%<propname>[:<fromChar>:<toChar>:<options>]%
<propname> 屬性名,可用的屬性名參考上文。
<fromChar> 和 <toChar> 表示對屬性值字符串的操作範圍。 設置 <fromChar> 爲 R,<toChar> 爲正則表達式即可以通過正則 表達式定義範圍。
<options> 則表示屬性選項。完整的列表可以參考 這裏的 Property Options 節。
一些示例如下:
%msg% # 日志的完整消息文本
%msg:1:2% # 日志消息文本的最開始兩個字符
%msg:::drop-last-lf% # 日志的完整消息文本,移出最後的換行符
%timegenerated:1:10:date-rfc3339% # 時間戳的頭10個字符並按 RFC3999 標准格式化
下面是一些模板例子。
輸出日志的級別,類別,收到日志時的時間錯,主機名,消息標簽,消息正文, 加上換行符:
$template verbose,"%syslogseverity%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%\n"
輸出日志來源,時間以及日志標簽,正文,同時還有蜂鳴聲(\7):
$template wallmsg,"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag% %msg%\n\r"
格式化日志以便於直接進行 SQL 操作:
$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql
以 json 格式輸出,方便程序解析:
$template jsonFormat,"{\"message\":\"%msg:::json%\",\"fromhost\":\"%HOSTNAME:::json%\",\"facility\":\"%syslogfacility-text%\",\"priority\":\"%syslogpriority-text%\",\"timereported\":\"%timereported:::date-rfc3339%\",\"timegenerated\":\"%timegenerated:::date-rfc3339%\"}\n"
注意,message 的內容會在最前面多一個空格,其解釋請參考這裏。
rsyslog 也提供了一些預定義的模板(以 RSYSLOG_ 爲前綴),參考 這裏 的 Reserved Template Names 節,其定義如下:
RSYSLOG_FileFormat
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
RSYSLOG_TraditionalFileFormat
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
RSYSLOG_ForwardFormat
"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
RSYSLOG_TraditionalForwardFormat
"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
使用這些模板,則在動作後附加 “;template_name” 即可,例如:
:programname,startswith,"cron" -/var/log/cron;RSYSLOG_TraditionalFileFormat