как присвоить определенное значение из вывода logstash

В logstash я получаю этот вывод, однако я пытаюсь получить репо: «имя пользователя/logstashrepo» только из этого вывода. Пожалуйста, поделитесь своими мыслями, как найти только это значение и присвоить его переменной.

message: "github_audit: {"actor_ip":"192.168.1.1","from":"repositories#create","actor":"username","repo":"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}}}}",
@version: "1",
@timestamp: "2014-11-18T08:25:05.427Z",
host: "15-274-145-63",
type: "syslog",
syslog5424_pri: "190",
timestamp: "Nov 18 00:25:05",
actor_ip: "192.168.1.1",
from: "repositories#create",
actor: "username",
repo: "username/logstashrepo",
user: "username",
created_at: 1416299104782,
action: "repo.create",
user_id: 1033,
repo_id: 44744,
actor_id: 1033,

Я использую это в своем файле конфигурации:

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

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"
    }
  }
}

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

На самом деле я разместил вопрос здесь, по какой-то причине я не могу редактировать и отслеживать.

как получить определенное поле из вывода logstash


person bsd    schedule 18.11.2014    source источник


Ответы (1)


Вы можете настроить фильтр json для хранения развернутого объекта JSON в подполе. Используйте фильтр изменения, чтобы переместить поле "repo" на верхний уровень и удалить целое подполе. Частичный пример из фильтра json и далее:

json {
  source => "json_payload"
  target => "json"
  remove_field => "json_payload"
}

mutate {
  rename => ["[json][repo]", "repo"]
  remove_field => "json"
}
person Magnus Bäck    schedule 18.11.2014
comment
извините, еще одно сомнение, могу ли я сохранить это конкретное значение (репозиторий: имя пользователя/logstashrepo) в любую переменную или файл из приведенного выше вывода, мне нужно использовать это значение для выполнения заранее спасибо - person bsd; 18.11.2014
comment
Logstash имеет несколько доступных плагинов вывода. Вы могли бы, например. сохраните поле или сообщение в файл или выполните команду. - person Magnus Bäck; 18.11.2014
comment
Привет, я использовал для удаления других полей из моего вывода, и мне нужно только репо: имя пользователя/logstashrepo из вывода, я использовал этот метод, но я не получаю репо: имя пользователя/logstashrepo только json { source => json_payload remove_field =› json_payload } mutate { rename =› [[json][repo], repo] remove_field =› [[json][syslog5424_pri]] remove_field =› [[json][host]] remove_field =› [[json][type ]] } - person bsd; 25.11.2014