Memo/AmazonWebServices/KinesisDataFirehose

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/KinesisDataFirehose
 

Kinesis Data Firehose: ストリーミングデータ(ログ等)をS3/Elasticsearch/Redshift/Splunk等に送信


ログ分析


td-agent-bit(fluentd-bit)からの利用


td-agent(fluentd)からの利用


aws-kinesis-agent: EC2等へインストールしてデータを送信する

  • aws-kinesis-agenton EC2 -> Kinesis Firehose -> S3やElasticsearchへ転送等ができる
  • 対象のログは aws-kinesis-agent-user ユーザで読み取る権限が必要。
    • logrotateの際にユーザが変わる事もあるので、logrotateのケアも必要。
    • セキュリティ要件の高いログ(元が0600)は、0640にしてgroupにaws-kinesis-agent-userを追加した方が良さそう。
      sudo usermod -aG wheel aws-kinesis-agent-user
      sudo chown :wheel /tmp/app.log
      sudo chmod 640 /tmp/app.log
  • deliveryStream:だと、Firehose が使われる。間違って kinesisStream: を指定すると、kinesis Streamが使われるので注意。
  • EL用のrpmにはlogrotateが入ってないので自分で作る
    cat /etc/logrotate.d/aws-kinesis-agent
    /var/log/aws-kinesis-agent/*.log {
        missingok
        notifempty
        compress
        dateext
        copytruncate
        create 0664 aws-kinesis-agent-user aws-kinesis-agent-user
        su aws-kinesis-agent-user aws-kinesis-agent-user
    }
  • /etc/sysconfig/aws-kinesis-agent
    • aws access key等を記載する。EC2の場合はIAM roleの方が良い。
    • AGENT_LOG_LEVEL="TRACE" とすると、送信できない場合にログが出る
  • /etc/aws-kinesis/agent.json
    • jsonの行頭にスペースが存在してもエラーにはならない
    • v1.1.5.1: flows: []が必須。存在しないと、NullPointerExceptionが発生した。
      {
        "cloudwatch.emitMetrics": false,
        "cloudwatch.endpoint": "monitoring.ap-northeast-1.amazonaws.com",
        "firehose.endpoint": "firehose.ap-northeast-1.amazonaws.com",
        "kinesis.endpoint": "",
        "flows": [
        ]
      }
  • /etc/aws-kinesis/agent.d/
    • flows: セクションをagent.jsonから分離して別ファイルとして置ける
    • /etc/aws-kinesis/agent.d/app_log.json
      {
        "flows": [
          {
            "filePattern": "/tmp/app.log*",
            "deliveryStream": "yourdeliverystream"
          }
        ]
      }
  • /var/run/aws-kinesis-agent/checkpoints
    • SQLite形式で、kinesis-agentが読んだファイル等を保存している

aws-kinesis-agent: logrotateでcopytruncateの場合、Exceptionが発生しつづける


正規表現


ログフォーマットサンプル

  • 元のログフォーマットのまま送る
    • /etc/aws-kinesis/agent.d/app_log.json
      {
        "flows": [
          {
            "filePattern": "/tmp/app.log*",
            "deliveryStream": "yourdeliverystream"
          }
        ]
      }
  • SYSLOGフォーマット(/var/log/messages, secure等)
    • /etc/aws-kinesis/agent.d/messages.json
      {
        "flows": [
          {
            "dataProcessingOptions": [
              {
                "logFormat": "SYSLOG",
                "optionName": "LOGTOJSON"
              }
            ],
            "deliveryStream": "yourdeliverystream",
            "filePattern": "/var/log/messages*"
          }
        ]
      }

複数行のログ


EC2 metadataをログに追加する

  • /etc/aws-kinesis/agent.d/messages.json
    {
      "flows": [
        {
          "dataProcessingOptions": [
            {
              "logFormat": "SYSLOG",
              "optionName": "LOGTOJSON"
            },
            {
              "logFormat": "SYSLOG",
              "optionName": "ADDEC2METADATA"
            }
          ],
          "deliveryStream": "yourdeliverystream",
          "filePattern": "/var/log/messages*"
        }
      ]
    }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-09-18 (金) 18:52:54 (70d)