Структурирање на неструктурирани податоци со ГРОК
Ако го користите стекот Elastic (ELK) и сте заинтересирани да мапирате прилагодени логови на Logstash на Elasticsearch, тогаш оваа објава е за вас.
Стакот ELK е акроним за три проекти со отворен код: Elasticsearch, Logstash и Kibana. Заедно тие формираат платформа за управување со дневници.
- Еластична пребарување е систем за пребарување и аналитика.
- Логсташ е цевковод за обработка на податоци од страна на серверот кој внесува податоци од повеќе извори истовремено, ги трансформира, а потоа ги испраќа во „скривање“ како што е Elasticsearch.
- Кибана им овозможува на корисниците да ги визуелизираат податоците користејќи графикони и графикони во Elasticsearch.
Отчукувања дојде подоцна и е лесен доставувач на податоци. Воведувањето на Beats го трансформираше Elk Stack во Elastic Stack, но тоа не е поентата.
Оваа статија е за Грок, која е карактеристика во Logstash која може да ги трансформира вашите дневници пред да бидат испратени во скривалиштето. За наши цели, ќе зборувам само за обработка на податоци од Logstash во Elasticsearch.
Grok е филтер во Logstash кој се користи за анализа на неструктурирани податоци во нешто структурирано и прашално. Седи на врвот на регуларен израз (регекс) и користи текстуални обрасци за да одговара на низите во датотеките за дневници.
Како што ќе видиме во следните делови, користењето на Grok прави голема разлика кога станува збор за ефикасно управување со дневниците.
Без Грок вашите податоци од дневникот се неструктурирани
Без Grok, кога дневниците се испраќаат од Logstash до Elasticsearch и се прикажуваат во Kibana, тие се појавуваат само во вредноста на пораката.
Барањето значајни информации во оваа ситуација е тешко бидејќи сите податоци од дневникот се складираат во еден клуч. Подобро би било пораките од дневникот да бидат подобро организирани.
Неструктурирани податоци од дневници
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Ако внимателно ги погледнете необработените податоци, ќе видите дека тие всушност се состои од различни делови, секој одделен со празно место.
За поискусните програмери, веројатно можете да погодите што значи секој од деловите и каква е таа порака од дневникот од повикот на API. Презентацијата на секоја ставка е наведена подолу.
Структуриран приказ на нашите податоци
- localhost == околина
- GET == метод
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == одговор_статус
- 46ms == одговор_време
- 5bc6e716b5d6cb35fc9687c0 == user_id
Како што гледаме во структурирани податоци, постои ред за неструктурирани логови. Следниот чекор е софтверска обработка на необработени податоци. Тука блеска Грок.
Шаблони за Грок
Вградени шаблони за Грок
Logstash доаѓа со над 100 вградени шаблони за структурирање на неструктурирани податоци. Дефинитивно треба да го искористите ова секогаш кога е можно за општи системски логови како apache, Linux, haproxy, aws и така натаму.
Меѓутоа, што се случува кога имате сопствени дневници како во примерот погоре? Мора да изградите свој шаблон за Грок.
Прилагодени шаблони за Grok
Мора да се обидете да изградите свој шаблон за Грок. користев
Забележете дека синтаксата на шаблонот Grok е како што следува: %{SYNTAX:SEMANTIC}
Првото нешто што се обидов да направам беше да отидам на јазичето Откријте во дебагерот Грок. Мислев дека би било кул ако оваа алатка може автоматски да генерира шема на Грок, но не беше премногу корисна бидејќи најде само две совпаѓања.
Користејќи го ова откритие, почнав да создавам сопствен шаблон во дебагерот Grok користејќи ја синтаксата пронајдена на страницата Elastic Github.
Откако си поиграв со различни синтакси, конечно успеав да ги структурирам податоците од дневникот онака како што сакав.
Link Debugger Grok
Оригинален текст:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Уметност:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Што се случи на крајот
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Со шаблонот Grok и мапираните податоци во рака, последниот чекор е да го додадете во Logstash.
Ажурирање на конфигурациската датотека Logstash.conf
На серверот каде што сте го инсталирале стекот ELK, одете во конфигурацијата Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
Залепете ги промените.
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Откако ќе ги зачувате промените, рестартирајте го Logstash и проверете го неговиот статус за да бидете сигурни дека сè уште работи.
sudo service logstash restart
sudo service logstash status
Конечно, за да бидете сигурни дека промените стапиле на сила, Не заборавајте да го ажурирате вашиот индекс на Elasticsearch за Logstash во Кибана!
Со Грок, вашите податоци од дневникот се структурирани!
Како што можеме да видиме на сликата погоре, Грок е способен автоматски да ги совпаѓа податоците од дневникот со Elasticsearch. Ова го олеснува управувањето со дневниците и брзо барање информации. Наместо да копате низ датотеките за евиденција за отстранување грешки, можете едноставно да филтрирате според она што го барате, како што е околина или URL адреса.
Пробајте ги изразите на Грок! Ако имате друг начин да го направите ова или имате какви било проблеми со примерите погоре, само напишете коментар подолу за да ме известите.
Ви благодариме за читањето - и ве молам следете ме овде на Медиум за повеќе интересни написи за софтверско инженерство!
Ресурси
PS
Телеграмски канал од
Извор: www.habr.com