DatadogのMulti-line aggregationを構成する

ログ収集の高度な構成

複数行の自動検出は、以下の日付/時刻形式から始まり、それに準拠するログを検出します: RFC3339、ANSIC、Unix Date Format、Ruby Date Format、RFC822、RFC822Z、RFC850、RFC1123、RFC1123Z、RFC3339Nano、Java ロギング SimpleFormatter デフォルト日付書式。

具体的な正規表現はこれ

設定例

1
2
3
4
5
logs_config:
  auto_multi_line_detection: true
  auto_multi_line_extra_patterns:
   - \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
   - '[A-Za-z_]+ \d+, \d+ \d+:\d+:\d+ (AM|PM)'
1
2
3
4
5
6
7
containers:
    agent:
      env: 
       - name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_DETECTION
         value: "true"
	     - name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_EXTRA_PATTERNS
	       value: '^23-03.*'

Goのlog packageの書式

2023/08/31 01:48:35 になる。これはDatadogのauto multineではサポートされていない書式。

Patternを追加する

1
2
- name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_EXTRA_PATTERNS
	value: '\d+/\d+/\d+ \d+:\d+:\d+'

logのformatを変更する

https://stackoverflow.com/questions/26152993/go-logger-to-print-timestamp

1
2
3
4
func Log(l *log.Logger, msg string) {
    l.SetPrefix(time.Now().Format("2006-01-02 15:04:05"))
    l.Print(msg)
}
> back to posts