Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Menstruktur data tidak berstruktur dengan GROK

Jika anda menggunakan timbunan Elastik (ELK) dan berminat untuk memetakan log Logstash tersuai ke Elasticsearch, maka siaran ini adalah untuk anda.

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Tindanan ELK ialah akronim untuk tiga projek sumber terbuka: Elasticsearch, Logstash dan Kibana. Bersama-sama mereka membentuk platform pengurusan log.

  • Elasticsearch ialah sistem carian dan analisis.
  • Logstash ialah saluran paip pemprosesan data sebelah pelayan yang menyerap data daripada berbilang sumber secara serentak, mengubahnya dan kemudian menghantarnya ke "simpanan" seperti Elasticsearch.
  • Kibana membolehkan pengguna memvisualisasikan data menggunakan carta dan graf dalam Elasticsearch.

Beats datang kemudian dan merupakan pengirim data yang ringan. Pengenalan Beats telah mengubah Tindanan Elk menjadi Tindanan Elastik, tetapi bukan itu maksudnya.

Artikel ini mengenai Grok, yang merupakan ciri dalam Logstash yang boleh mengubah log anda sebelum dihantar ke simpanan. Untuk tujuan kami, saya hanya akan bercakap mengenai pemprosesan data daripada Logstash ke dalam Elasticsearch.

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Grok ialah penapis di dalam Logstash yang digunakan untuk menghuraikan data tidak berstruktur kepada sesuatu yang berstruktur dan boleh ditanya. Ia terletak di atas ungkapan biasa (regex) dan menggunakan corak teks untuk memadankan rentetan dalam fail log.

Seperti yang akan kita lihat dalam bahagian berikut, menggunakan Grok membuat perbezaan besar apabila ia berkaitan dengan pengurusan log yang cekap.

Tanpa Grok data log anda tidak berstruktur

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Tanpa Grok, apabila log dihantar dari Logstash ke Elasticsearch dan diberikan dalam Kibana, log tersebut hanya muncul dalam nilai mesej.

Menyoal maklumat yang bermakna dalam situasi ini adalah sukar kerana semua data log disimpan dalam satu kunci. Adalah lebih baik jika mesej log lebih teratur.

Data tidak berstruktur daripada log

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Jika anda melihat dengan teliti pada data mentah, anda akan melihat bahawa ia sebenarnya terdiri daripada bahagian yang berbeza, setiap satu dipisahkan oleh ruang.

Untuk pembangun yang lebih berpengalaman, anda mungkin boleh meneka maksud setiap bahagian dan apakah mesej log itu daripada panggilan API. Pembentangan setiap item digariskan di bawah.

Pandangan terstruktur bagi data kami

  • localhost == persekitaran
  • Kaedah GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == status_respons
  • ​ 46ms == masa_balas
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Seperti yang kita lihat dalam data berstruktur, terdapat perintah untuk log tidak berstruktur. Langkah seterusnya ialah pemprosesan perisian data mentah. Di sinilah Grok bersinar.

Templat Grok

Templat Grok terbina dalam

Logstash datang dengan lebih 100 templat terbina dalam untuk menstruktur data tidak berstruktur. Anda pastinya harus mengambil kesempatan daripada ini apabila boleh untuk syslog umum seperti apache, linux, haproxy, aws dan sebagainya.

Walau bagaimanapun, apakah yang berlaku apabila anda mempunyai log tersuai seperti dalam contoh di atas? Anda mesti membina templat Grok anda sendiri.

Templat Grok tersuai

Anda perlu cuba membina templat Grok anda sendiri. sudah biasa Penyahpepijat Grok ΠΈ Corak Grok.

Ambil perhatian bahawa sintaks templat Grok adalah seperti berikut: %{SYNTAX:SEMANTIC}

Perkara pertama yang saya cuba lakukan ialah pergi ke tab Teroka dan Kenal dalam penyahpepijat Grok. Saya fikir ia akan menjadi bagus jika alat ini boleh menjana corak Grok secara automatik, tetapi ia tidak terlalu berguna kerana ia hanya menemui dua padanan.

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Menggunakan penemuan ini, saya mula mencipta templat saya sendiri dalam penyahpepijat Grok menggunakan sintaks yang terdapat pada halaman Github Elastik.

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Selepas bermain-main dengan sintaks yang berbeza, saya akhirnya dapat menstruktur data log seperti yang saya mahukan.

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Pautan Penyahpepijat Grok https://grokdebug.herokuapp.com/

Teks asal:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Corak:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Apa yang berlaku akhirnya

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Dengan templat Grok dan data yang dipetakan di tangan, langkah terakhir ialah menambahkannya pada Logstash.

Mengemas kini fail konfigurasi Logstash.conf

Pada pelayan tempat anda memasang tindanan ELK, pergi ke konfigurasi Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Tampalkan perubahan.

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" ]
  }
}

Selepas menyimpan perubahan anda, mulakan semula Logstash dan semak statusnya untuk memastikan ia masih berfungsi.

sudo service logstash restart
sudo service logstash status

Akhir sekali, untuk memastikan perubahan telah berkuat kuasa, Pastikan anda mengemas kini indeks Elasticsearch anda untuk Logstash di Kibana!

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Dengan Grok, data log anda tersusun!

Petua dan kiat untuk menukar data tidak berstruktur daripada log kepada ELK Stack menggunakan GROK dalam LogStash

Seperti yang dapat kita lihat dalam imej di atas, Grok mampu memadankan data log secara automatik dengan Elasticsearch. Ini menjadikannya lebih mudah untuk mengurus log dan maklumat pertanyaan dengan cepat. Daripada menggali fail log untuk nyahpepijat, anda hanya boleh menapis mengikut perkara yang anda cari, seperti persekitaran atau url.

Cuba ekspresi Grok! Jika anda mempunyai cara lain untuk melakukan ini atau mempunyai sebarang masalah dengan contoh di atas, tulis sahaja ulasan di bawah untuk memberitahu saya.

Terima kasih kerana membacaβ€”dan sila ikuti saya di sini di Medium untuk lebih banyak artikel kejuruteraan perisian yang menarik!

РСсурсы

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 Pautan sumber

Saluran Telegram oleh Elasticsearch

Sumber: www.habr.com

Tambah komen