0

この logstash 1.repositories#create 2.\"repo\":\"username/reponame\" からの出力からいくつかのフィールドのみを grep しようとしています。この出力から特定の情報を grep し、これを別の変数に割り当てるというアイデアを共有してください

"message" => "<190>Nov 01 20:35:15 10-254-128-66 github_audit: {\"actor_ip\":\"192.168.1.1\",\"from\":\"repositories# create\",\"actor\":\"myuserid\",\"repo\":\"username/reponame\",\"action\":\"staff.repo_route\",\"created_at\": 1516286634991,\"repo_id\":44743,\"actor_id\":1033,\"data\":{\"actor_location\":{\"location\":{\"lat\":null,\"lon \":ヌル}}}}"、

この syslog.conf ファイルを使用して出力を取得しています。

input {
  tcp {
    port => 8088
    type => syslog
  }
  udp {
    port => 8088
    type => syslog
  }
}

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp}"
    }
    grep {
      match => { "message" => "repositories#create" }
    }
  }
}

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

返信にコメントを追加できませんでした。返信ありがとうございます。

username: と repo: をこの出力からのみ取得するためのアイデアを共有してください。この特定の出力から値を割り当てようとしています。ありがとうございます

メッセージ: "github_audit: {"actor_ip":"192.168.1.1","from":"repositories#create","actor":"username","re​​po":"username/logstashrepo","user":"username ","created_at":1416299104782,"action":"repo.create","user_id":1033,"repo_id":44744,"actor_id":1033,"data":{"actor_location":{"location": {"lat":null,"lon":null}}}}"、@バージョン: "1"、@タイムスタンプ: "2014-11-18T08:25:05.427Z"、ホスト: "15-274-145- 63"、タイプ: "syslog"、syslog5424_pri: "190"、タイムスタンプ: "11 月 18 日 00:25:05"、actor_ip: "10.239.37.185"、from: "repositories#create"、actor: "username"、repo : "ユーザー名/logstashrepo"、ユーザー: "ユーザー名"、created_at: 1416299104782、アクション: "repo.create"、user_id: 1033、repo_id: 44744、actor_id: 1033、

4

1 に答える 1

1

grok フィルターを使用して JSON ペイロードを別のフィールドに抽出し、次にjson フィルターを使用して JSON オブジェクトからフィールドを抽出します。以下の例は機能しますが、「github_audit:」で始まるメッセージから JSON ペイロードを抽出するだけです。また、タイムスタンプの後のフィールドは、現在「ホスト」フィールドにあるものを上書きする必要があるホスト名であると推測しています。「timestamp」フィールドの文字列を「@timestamp」に解析する日付フィルターを追加することを忘れないでください。

filter {
  grok {
    match => [
      "message",
      "%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{GREEDYDATA:message}"
    ]
    overwrite => ["host", "message"]
  }
  if [message] =~ /^github_audit: / {
    grok {
      match => ["message", "^github_audit: %{GREEDYDATA:json_payload}"]
    }
    json {
      source => "json_payload"
      remove_field => "json_payload"
    }
  }
}
于 2014-11-18T06:55:44.337 に答える