LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

GROK көмегімен құрылымдалмаған деректерді құрылымдау

Егер сіз Elastic (ELK) стегін пайдаланып жатсаңыз және реттелетін Logstash журналдарын Elasticsearch-ке салыстыруға қызығушылық танытсаңыз, онда бұл пост сізге арналған.

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

ELK стек үш ашық бастапқы жобаның аббревиатурасы: Elasticsearch, Logstash және Kibana. Олар бірге журналды басқару платформасын құрайды.

  • Elasticearch іздеу және талдау жүйесі болып табылады.
  • Logstash бірнеше көздерден деректерді бір уақытта қабылдайтын, оны түрлендіретін, содан кейін Elasticsearch сияқты «сақтаға» жіберетін серверлік деректерді өңдеу құбыры.
  • Кибана пайдаланушыларға Elasticsearch жүйесінде диаграммалар мен графиктер арқылы деректерді визуализациялауға мүмкіндік береді.

Жеңеді кейінірек келді және жеңіл деректерді жіберуші болып табылады. Beats-тің енгізілуі Elk Stack-ті Эластикалық стекке айналдырды, бірақ бұл мәселе емес.

Бұл мақала Grok туралы, ол Logstash жүйесіндегі мүмкіндік болып табылады, ол журналдарды қоймаға жібермес бұрын өзгерте алады. Біздің мақсаттарымыз үшін мен Logstash деректерін Elasticsearch ішіне өңдеу туралы ғана айтамын.

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Grok - Logstash ішіндегі сүзгі, ол құрылымдалмаған деректерді құрылымдалған және сұрауға болатын нәрсеге талдау үшін пайдаланылады. Ол тұрақты өрнектің (regex) үстінде орналасады және журнал файлдарындағы жолдарды сәйкестендіру үшін мәтін үлгілерін пайдаланады.

Келесі бөлімдерде көретініміздей, Grok пайдалану журналды тиімді басқаруға келгенде үлкен айырмашылықты тудырады.

Grok болмаса, журнал деректеріңіз құрылымдалмаған

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

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 Debugger и Grok үлгілері.

Grok үлгісінің синтаксисі келесідей екенін ескеріңіз: %{SYNTAX:SEMANTIC}

Мен жасауға тырысқан бірінші нәрсе - қойындыға өту ашу Grok түзеткішінде. Мен бұл құрал автоматты түрде Grok үлгісін жасай алса жақсы болар еді деп ойладым, бірақ ол өте пайдалы емес еді, өйткені ол тек екі сәйкестік тапты.

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Осы ашылымды пайдалана отырып, мен Elastic Github бетінде табылған синтаксисті пайдаланып Grok отладчикінде өз үлгімді жасай бастадым.

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Әртүрлі синтаксистермен ойнағаннан кейін мен журнал деректерін өзім қалағандай құрылымдай алдым.

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Grok Debugger сілтемесі https://grokdebug.herokuapp.com/

Түпнұсқа мәтін:

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 индексін жаңартуды ұмытпаңыз!

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Grok көмегімен журнал деректеріңіз құрылымдалған!

LogStash ішіндегі GROK көмегімен құрылымданбаған деректерді журналдардан ELK стекіне түрлендіру бойынша кеңестер мен амалдар

Жоғарыдағы суретте көріп отырғанымыздай, Grok журнал деректерін Elasticsearch көмегімен автоматты түрде сәйкестендіруге қабілетті. Бұл журналдарды басқаруды және ақпаратты жылдам сұрауды жеңілдетеді. Түзету үшін журнал файлдарын іздеудің орнына орта немесе url сияқты іздеген нәрсе бойынша сүзуге болады.

Grok өрнектерін қолданып көріңіз! Егер сізде мұны істеудің басқа жолы болса немесе жоғарыдағы мысалдарға қатысты қандай да бір мәселелер туындаса, маған хабарлау үшін төменде түсініктеме жазыңыз.

Оқығаныңыз үшін рахмет және бағдарламалық жасақтама туралы қызықты мақалалар үшін Medium сайтында мені қадағалаңыз!

Ресурстар

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Бастапқы сілтеме

Телеграм каналы Elasticearch

Ақпарат көзі: www.habr.com

пікір қалдыру