# Как распарсить лог нжинкса в случае хождения по апстримам

**URL:** <https://discuss.elastic.co/t/topic/155515>\
**Category:** Вопросы на русском языке\
**Created:** [November 6, 2018, 9:10am UTC](https://discuss.elastic.co/t/topic/155515 "2018-11-06T09:10:33Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![vitich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vitich/32/65611_2.png) [@vitich](https://discuss.elastic.co/u/vitich)\
**Post date:** [November 6, 2018, 9:10am UTC](https://discuss.elastic.co/t/topic/155515/1 "2018-11-06T09:10:33Z")

</div>

Помогите с идеями как лучше распарсить лог нжинкса в случае хождения по апстримам

Прилетать может в подобных вариациях:  
В зависимости от количества апстримов и с разделителями ", " или " : "  
Формат аля csv в данном случае не принципиален, принципиально понять суть как лучше.  
Моя идея в том чтобы ловить последний апстрим как upstream (айпи, статус и время коннект респонс), а всё что до последнего апстрима запихивать в badupstream просто текстом.  
Может у кого-то был опыт?  
В идеале, конечно, если бы nginx отправлял в таких случаях отдельными полями, тогда бы не было вопросов - включил json и всё, а так приходится выкручиваться ибо не люблю \_grokparsefailure

Вот примерные вариации логов ("upstream\_addr"; "upstream\_status"; "upstream\_connect\_time"; "upstream\_response\_time")

"-"; "-"; "- sec"; "- sec";  
"-, -"; "-, -"; "-, - sec"; "-, - sec";  
"- : -"; "- : -"; "- : - sec"; "- : - sec";  
"-, - : -"; "-, - : -"; "-, - : - sec"; "- : - sec";  
"10.10.10.23:80"; "200"; "2.953 sec"; "2.953 sec";  
"10.10.10.23:80, 10.10.10.24:80"; "502, -"; "2.953, - sec"; "2.953, - sec";  
"10.10.10.23:80 : 10.10.10.24:80"; "502 : -"; "2.953 : - sec"; "2.953 : - sec";  
"10.10.10.23:80, 10.10.10.24:80 : 10.10.10.25:80"; "502, 502 : -"; "2.953, 1.000 : - sec"; "2.953, 2.000 : - sec";  
"10.10.10.23:80, 10.10.10.24:80 : 10.10.10.25:80"; "502, 502 : 200"; "2.953, 1.000 : 0.001 sec"; "2.953, 2.000 : 0.002 sec";  
"10.10.10.23:80, 10.10.10.24:80, 10.10.10.25:80"; "502, 502, -"; "2.953, 1.000, - sec"; "2.953, 2.000, - sec";  
"10.10.10.23:80, 10.10.10.24:80, 10.10.10.25:80"; "502, 502, 200"; "2.953, 1.000, 0.001 sec"; "2.953, 2.000, 0.002 sec";

---

<div class="post-metadata">

**Author:** ![Vladimir.Dolzhenko](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vladimir.dolzhenko/32/34352_2.png) [@Vladimir.Dolzhenko](https://discuss.elastic.co/u/Vladimir.Dolzhenko)\
**Post date:** [November 6, 2018, 9:16am UTC](https://discuss.elastic.co/t/topic/155515/2 "2018-11-06T09:16:16Z")

</div>

может лучше воспользоваться [CSV фильтром](https://www.elastic.co/guide/en/logstash/6.4/plugins-filters-csv.html) ?

---

<div class="post-metadata">

**Author:** ![vitich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vitich/32/65611_2.png) [@vitich](https://discuss.elastic.co/u/vitich)\
**Post date:** [November 6, 2018, 10:22am UTC](https://discuss.elastic.co/t/topic/155515/3 "2018-11-06T10:22:03Z")

</div>

А как это решит проблему с апстримами?  
Формат не принципиален, к сожалению - в данном случае он похож на csv но проблема не с полями, как таковыми, а с множественными значениями внутри некоторых полей - вот их и хочу ловить правильно.  
Сейчас у меня работает вариант который выкусывает последнее как upstream\* и всё что до как badupstream - а чем csv фильтр мне поможет?

---

<div class="post-metadata">

**Author:** ![vitich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vitich/32/65611_2.png) [@vitich](https://discuss.elastic.co/u/vitich)\
**Post date:** [November 7, 2018, 10:09am UTC](https://discuss.elastic.co/t/topic/155515/4 "2018-11-07T10:09:04Z")

</div>

Я нашел решение (gsub + split + ruby)  
Если есть поля с множественными значениями, то из них создаются доп. поля.  
Потестирую и выложу сюда, если всё устроит.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 5, 2018, 10:09am UTC](https://discuss.elastic.co/t/topic/155515/5 "2018-12-05T10:09:06Z")

</div>

Closed on December 5, 2018, 10:09am UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
