GROK көмегімен құрылымдалмаған деректерді құрылымдау
Егер сіз Elastic (ELK) стегін пайдаланып жатсаңыз және реттелетін Logstash журналдарын Elasticsearch-ке салыстыруға қызығушылық танытсаңыз, онда бұл пост сізге арналған.
ELK стек үш ашық бастапқы жобаның аббревиатурасы: Elasticsearch, Logstash және Kibana. Олар бірге журналды басқару платформасын құрайды.
- Elasticearch іздеу және талдау жүйесі болып табылады.
- Logstash бірнеше көздерден деректерді бір уақытта қабылдайтын, оны түрлендіретін, содан кейін Elasticsearch сияқты «сақтаға» жіберетін серверлік деректерді өңдеу құбыры.
- Кибана пайдаланушыларға Elasticsearch жүйесінде диаграммалар мен графиктер арқылы деректерді визуализациялауға мүмкіндік береді.
Жеңеді кейінірек келді және жеңіл деректерді жіберуші болып табылады. Beats-тің енгізілуі Elk Stack-ті Эластикалық стекке айналдырды, бірақ бұл мәселе емес.
Бұл мақала Grok туралы, ол Logstash жүйесіндегі мүмкіндік болып табылады, ол журналдарды қоймаға жібермес бұрын өзгерте алады. Біздің мақсаттарымыз үшін мен Logstash деректерін Elasticsearch ішіне өңдеу туралы ғана айтамын.
Grok - Logstash ішіндегі сүзгі, ол құрылымдалмаған деректерді құрылымдалған және сұрауға болатын нәрсеге талдау үшін пайдаланылады. Ол тұрақты өрнектің (regex) үстінде орналасады және журнал файлдарындағы жолдарды сәйкестендіру үшін мәтін үлгілерін пайдаланады.
Келесі бөлімдерде көретініміздей, Grok пайдалану журналды тиімді басқаруға келгенде үлкен айырмашылықты тудырады.
Grok болмаса, журнал деректеріңіз құрылымдалмаған
Grok болмаса, журналдар Logstash жүйесінен Elasticsearch қызметіне жіберіліп, Kibana-да көрсетілгенде, олар тек хабар мәнінде пайда болады.
Бұл жағдайда маңызды ақпаратты сұрау қиын, себебі барлық журнал деректері бір кілтте сақталады. Журнал хабарламалары жақсырақ ұйымдастырылса жақсы болар еді.
Журналдардағы құрылымданбаған деректер
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Егер сіз бастапқы деректерге мұқият қарасаңыз, оның шын мәнінде әрқайсысы бос орынмен бөлінген әртүрлі бөліктерден тұратынын көресіз.
Неғұрлым тәжірибелі әзірлеушілер үшін бөліктердің әрқайсысы нені білдіретінін және бұл журнал хабары API қоңырауынан не екенін болжай аласыз. Әрбір элементтің тұсаукесері төменде көрсетілген.
Деректеріміздің құрылымдық көрінісі
- localhost == ортасы
- GET == әдісі
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == жауап_күйі
- 46 мс == жауап_уақыты
- 5bc6e716b5d6cb35fc9687c0 == user_id
Құрылымдық деректерде көріп отырғанымыздай, құрылымдалмаған журналдарға тапсырыс бар. Келесі қадам бастапқы деректерді бағдарламалық өңдеу болып табылады. Бұл жерде Грок жарқырайды.
Grok шаблондары
Кірістірілген Grok үлгілері
Logstash құрылымдалмаған деректерді құрылымдауға арналған 100-ден астам кірістірілген үлгілермен бірге келеді. Мүмкіндігінше apache, linux, haproxy, aws және т.б. сияқты жалпы сислогтар үшін мұны міндетті түрде пайдалану керек.
Дегенмен, жоғарыдағы мысалдағыдай реттелетін журналдар болған кезде не болады? Сіз өзіңіздің Grok үлгісін жасауыңыз керек.
Арнайы Grok үлгілері
Сіз өзіңіздің Grok үлгісін жасауға тырысуыңыз керек. Мен пайдаландым
Grok үлгісінің синтаксисі келесідей екенін ескеріңіз: %{SYNTAX:SEMANTIC}
Мен жасауға тырысқан бірінші нәрсе - қойындыға өту ашу Grok түзеткішінде. Мен бұл құрал автоматты түрде Grok үлгісін жасай алса жақсы болар еді деп ойладым, бірақ ол өте пайдалы емес еді, өйткені ол тек екі сәйкестік тапты.
Осы ашылымды пайдалана отырып, мен Elastic Github бетінде табылған синтаксисті пайдаланып Grok отладчикінде өз үлгімді жасай бастадым.
Әртүрлі синтаксистермен ойнағаннан кейін мен журнал деректерін өзім қалағандай құрылымдай алдым.
Grok Debugger сілтемесі
Түпнұсқа мәтін:
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
Соңында, өзгертулердің күшіне енгеніне көз жеткізу үшін, Кибанадағы Logstash үшін Elasticsearch индексін жаңартуды ұмытпаңыз!
Grok көмегімен журнал деректеріңіз құрылымдалған!
Жоғарыдағы суретте көріп отырғанымыздай, Grok журнал деректерін Elasticsearch көмегімен автоматты түрде сәйкестендіруге қабілетті. Бұл журналдарды басқаруды және ақпаратты жылдам сұрауды жеңілдетеді. Түзету үшін журнал файлдарын іздеудің орнына орта немесе url сияқты іздеген нәрсе бойынша сүзуге болады.
Grok өрнектерін қолданып көріңіз! Егер сізде мұны істеудің басқа жолы болса немесе жоғарыдағы мысалдарға қатысты қандай да бір мәселелер туындаса, маған хабарлау үшін төменде түсініктеме жазыңыз.
Оқығаныңыз үшін рахмет және бағдарламалық жасақтама туралы қызықты мақалалар үшін Medium сайтында мені қадағалаңыз!
Ресурстар
Телеграм каналы
Ақпарат көзі: www.habr.com