Итак, у меня есть новая установка logstash, и я пытаюсь развернуть logstash, чтобы получить доступ к журналам.
Я просматриваю и в конечном итоге сегментирую фильтры logstash на основе подсистем, и в настоящее время я работаю над анализом журналов osd.
Вот пример строки, с которой я работаю:
2015-06-02 16:45:49.515277 7f4968cfe700 0 -- 10.16.64.68:6813/97613 >> 10.16.64.29:6805/35260 pipe(0x25e36500 sd=538 :6813 s=2 pgs=15426 cs=623 l=0 c=0x1586fa20).fault with nothing to send, going to standby
Мой фильтр сейчас выглядит так:
%{TIMESTAMP_ISO8601:date} %{BASE16FLOAT:osd_epoch} %{NUMBER:error_bool} -- %{CEPH_HOST:client_A} %{FROMTO} %{CEPH_HOST:client_B}
Где $ {CEPH_HOST} и $ {FROMTO} - короткие шаблоны:
FROMTO (?:[<|>]){1,2}
CEPH_HOST (%{IPORHOST:ip}\:%{POSINT:port}/%{POSINT:socket})
Проблема в том, что теперь IP, похоже, содержит два адреса.
"client_A": [
[
"10.16.64.68:6813/97613"
]
],
"ip": [
[
"10.16.64.68",
"10.16.64.29"
]
],
"HOSTNAME": [
[
"10.16.64.68",
"10.16.64.29"
Я бы хотел погладить его, чтобы client_a
имеет IP и client_b
имеет IP.
Однако имеет ли это значение в конце концов?
Могу я оставить все как есть?
Если да, смогу ли я потом его отсортировать? Если нет, как сегментировать его, чтобы client_a
и client_b
разделены?
Нужно ли мне создавать «уникальный» узор для обоих?
Я не уверен, что вы когда-нибудь придумали, как это сделать, но я искал что-то похожее для моей собственной среды, и я думаю, что единственный способ сделать это - настроить шаблоны для каждого клиента.
Я протестировал их оба в конструктор Grok и они возвращают действительные поля.
Если бы вы просто хотели иметь поле для клиента A (10.16.64.68:6813/97613) и клиента B (10.16.64.29:6805/35260), это сработает:
%{TIMESTAMP_ISO8601:date} %{BASE16FLOAT:osd_epoch} %{NUMBER:error_bool} -- (?<client_a>(%{IPORHOST}\:%{POSINT}/%{POSINT})) %{FROMTO} (?<client_b>(%{IPORHOST}\:%{POSINT}/%{POSINT}))
2015-06-02 16:45: 49.515277 7f4968cfe700 0 - 10.16.64.68:6813/97613 10.16.64.29:6805/35260 ПОДЧИНЕННЫЕ
client_a: 10.16.64.68:6813/97613
client_b: 10.16.64.29:6805/35260
error_bool: 0
дата: 02.06.2015 · 16: 45: 49.515277
osd_epoch: 7f4968cfe700
Если вам также нужны отдельные поля для каждого элемента этого соединения (IP-адрес клиента a / b, порт клиента a / b, сокет клиента a / b), этот шаблон должен работать:
%{TIMESTAMP_ISO8601:date} %{BASE16FLOAT:osd_epoch} %{NUMBER:error_bool} -- (?<client_a>(%{IPORHOST:client_a_ip}\:%{POSINT:client_a_port}/%{POSINT:client_a_socket})) %{FROMTO} (?<client_b>(%{IPORHOST:client_b_ip}\:%{POSINT:client_b_port}/%{POSINT:client_b_socket}))
2015-06-02 16:45: 49.515277 7f4968cfe700 0 - 10.16.64.68:6813/97613 10.16.64.29:6805/35260 ПОДЧИНЕННЫЕ
client_a: 10.16.64.68:6813/97613
client_b: 10.16.64.29:6805/35260
client_a_ip: 10.16.64.68
client_b_ip: 10.16.64.29
client_a_port: 6813
client_b_port: 6805
client_a_socket: 97613
client_b_socket: 35260
error_bool: 0
дата: 02.06.2015 · 16: 45: 49.515277
osd_epoch: 7f4968cfe700