Datadog logs(パブリックベータ) を試してみる の続きで、 Datadog でのログ管理機能(パブリックベータ版)での検証履歴です。

Datadog でのログ管理機能(パブリックベータ版)が発表されました。 Introducing logs in Datadog Datadog Agent もメジャーバージョンアップとなり、色々と変わるようなので正式リリース前に触れてみます。 ベータではありますが、現行環境へすんなり導入できるかと...

htnosm.hatenablog.com

今回はログを送信する側での除外、置換、複数行を確認します。

目次

ログ収集設定

基本的な設定値

 # 必須
  - type: 入力タイプ (tcp/udp/file)
    # 入力タイプにより port/path のいずれか
    #port: tcp/udpの場合、ポート指定
    path: file の場合、対象ログファイルのフルパス
    service: 所有サービス名
    source: インテグレーション名、カスタムログの場合は任意文字列(カスタムメトリクス名に合わせるのが推奨との記載有り)
  # オプション
    sourcecategory: 絞り込み用オプション
    tags: タグ付け(カンマ区切り)

ログのタグには、収集対象のホストに付与されているタグも自動的に付与されます。

インテグレーションのログ収集設定

Datadog コンソール上で、設定方法と設定ファイルの例が参照できます。

  • [Logs]->[Docs]

もしくは、Datadog Agent インストールした際に作成される各exampleにも記載があります。

  • /etc/datadog-agent/conf.d/apache.d/conf.yaml.example 等

未サポートのログ収集設定

Datadog コンソール上で、今後実装予定のインテグレーションが参照できます。

  • [Logs]->[Docs]->[Server]->[Other] 等

インテグレーション追加のリクエストを送る事もできるようです。

Advanced log collection functions (収集ルール)

log_processing_rules ディレクティブでDatadogへ転送するログの詳細設定を行います。

以下、各ruleの利用例です。ログファイルは dd-agent ユーザでの読み込みが行える状態にしてあります。

exclude_at_match

除外設定です。パターンに一致するログの送信を行いません。 debug,info レベルのログは送信しない等で利用できます。

  • /var/log/messages から ansible を含む行を除外する例
logs:
  - type: file
    path: /var/log/messages
    service: syslog
    source: os
    sourcecategory: system
    tags: log_type:file,rule_type:exclude_at_match
    log_processing_rules:
      - type: exclude_at_match
        name: exclude_ansible
        ## Regexp can be anything
        pattern: \sansible.*:\s

送受信例

  • ログ例
Mar 28 hh:mm:ss ip-xxx-xxx-xxx-xxx ansible-setup: Invoked with filter=* gather_subset=['all'] fact_path=/etc/ansible/facts.d gather_timeout=10
  • Datadog 側
    • 除外されるため表示されない

include_at_match

ログ抽出設定です。 exclude_at_matchの逆で、パターンに一致するログのみを送信します。
例は mask_sequences の項へ記載します。

mask_sequences

パターンに一致する文字列のマスクを行います。

  • /var/log/maillog から stat= を含む行のみを抽出、メールアドレスをマスクする例
logs:
  - type: file
    path: /var/log/maillog
    service: maillog
    source: os
    sourcecategory: system
    tags: log_type:file,rule_type:include_at_match,rule_type:mask_sequences
    log_processing_rules:
      - type: include_at_match
        name: include_maillog_stat
        ## Regexp can be anything
        pattern: \sstat=.*?\s
      - type: mask_sequences
        name: mask_mailaddress
        replace_placeholder: " to=[mask_mailaddress], "
        ##One pattern that contains capture groups
        pattern: \sto=.*?,\s

送受信例

  • ログ例
Mar 28 hh:mm:ss ip-xxx-xxx-xxx-xxx sendmail[24023]: xxxxxxxx024023: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=31183, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
  • Datadog 側

multi_line

複数行を1行のログに集約します。

  • jenkins.log を送信する例
    • 今後実装予定のようですが、Jenkinsのログ収集は現時点ではサポートされていません。
logs:
  - type: file
    path: /var/log/jenkins/jenkins.log
    service: jenkins
    source: java
    sourcecategory: sourcecode
    tags: log_type:file,rule_type:multi_line
    #For multiline logs, if they start with a timestamp with format yyyy-mm-dd uncomment the below processing rule
    log_processing_rules:
      - type: multi_line
        pattern: \w{3}\s(0?[1-9]|[1-3][0-9]),\s\d{4}
        name: new_log_start_with_date

送受信例

  • ログ例
Mar 28, 2018 4:53:51 PM hudson.model.AsyncPeriodicWork$1 run
INFO: Started Fingerprint cleanup
  • Datadog 側

StackTraceも同様

ワイルドカードでの収集は割愛。 送信イメージは掴めた気がします。

元記事はこちら

Datadog Logs(パブリックベータ) ログ収集設定