GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengatur Logstash di Linux dengan ElasticSearch, Redis, Nginx

Logstash adalah aplikasi manajemen file log pusat sumber terbuka.

Anda dapat mengumpulkan log dari beberapa server, beberapa aplikasi, mengurai log tersebut, dan menyimpannya di tempat terpusat. Setelah disimpan, Anda dapat menggunakan GUI web untuk mencari log, menelusuri log, dan membuat berbagai laporan.

Tutorial ini akan menjelaskan dasar-dasar logstash dan semua yang perlu Anda ketahui tentang cara memasang dan mengonfigurasi logstash di sistem Anda.

1. Unduh Logstatsh Biner

Logstash adalah bagian dari keluarga elasticsearch. Unduh dari situs web logstash di sini. Harap dicatat bahwa Anda harus menginstal java di mesin Anda agar ini berfungsi.

atau, gunakan curl untuk mengunduhnya langsung dari situs web.

wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz 

tar zxvf logstash-1.4.2.tar.gz 

cd logstash-1.4.2

Catatan:Kami akan menginstal logstash menggunakan yum nanti. Untuk saat ini, pertama-tama kita akan mengunduh biner secara manual untuk memeriksa cara kerjanya dari baris perintah.

2. Logstash Tentukan Opsi di Baris Perintah

Untuk memahami dasar-dasar logstash, untuk tujuan pengujian, mari kita periksa beberapa hal dengan cepat dari baris perintah.

Jalankan logstash dari baris perintah seperti yang ditunjukkan di bawah ini. Saat diminta, cukup ketik "hello world" sebagai input.

# bin/logstash -e 'input { stdin { } } output { stdout {} }' 
hello world 
2014-07-06T17:27:25.955+0000 base hello world

Pada output di atas, baris pertama adalah "hello world" yang kita masukkan menggunakan stdin.

Baris ke-2 adalah output yang ditampilkan logstash menggunakan stdout. Pada dasarnya, itu hanya mengeluarkan apa pun yang kita masukkan di stdin.

Harap dicatat bahwa menentukan flag baris perintah -e memungkinkan Logstash menerima konfigurasi langsung dari baris perintah. Ini sangat berguna untuk menguji konfigurasi dengan cepat tanpa harus mengedit file antar iterasi.

3. Ubah Format Output menggunakan codec

Codec rubydebug akan menampilkan data peristiwa Logstash Anda menggunakan pustaka ruby-awesome-print.

Jadi, dengan mengkonfigurasi ulang output "stdout" (menambahkan "codec"), kita dapat mengubah output Logstash. Dengan menambahkan input, output, dan filter ke konfigurasi Anda, dimungkinkan untuk memijat data log dalam banyak cara, untuk memaksimalkan fleksibilitas data yang disimpan saat Anda menanyakannya.

# bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }' 
hello world 
{ 
       "message" => "", 
      "@version" => "1", 
    "@timestamp" => "2014-07-06T17:40:48.775Z", 
          "host" => "base" 
} 
{ 
       "message" => "hello world", 
      "@version" => "1", 
    "@timestamp" => "2014-07-06T17:40:48.776Z", 
          "host" => "base" 
}

4. Unduh ElasticSearch

Sekarang kita telah melihat cara kerja Logstash, Mari kita lanjutkan satu langkah lagi. Jelas bahwa kita tidak dapat melewatkan input dan output setiap log secara manual. Jadi untuk mengatasi masalah ini kita harus menginstal perangkat lunak bernama Elasticsearch .

Unduh elasticsearch dari sini.

Atau, gunakan wget seperti yang ditunjukkan di bawah ini.

curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.0.tar.gz

tar zxvf elasticsearch-1.4.0.tar.gz

Mulai layanan elasticsearch seperti yang ditunjukkan di bawah ini:

cd elasticsearch-1.4.0/ 

./bin/elasticsearch

Catatan:Tutorial ini menentukan menjalankan Logstash 1.4.2 dengan Elasticsearch 1.4.0. Setiap rilis Logstash memiliki versi Elasticsearch yang direkomendasikan untuk dipasangkan. Pastikan versi cocok berdasarkan versi Logstash yang Anda jalankan.

5. Verifikasi ElasticSearch

Secara default, elasticsearch berjalan pada port 9200.

Untuk tujuan pengujian, kami masih akan mengambil input dari stdin (mirip dengan contoh kami sebelumnya), tetapi output tidak akan ditampilkan di stdout. Sebaliknya, itu akan masuk ke elasticsearch.

Untuk memverifikasi elasticsearch, mari kita jalankan yang berikut ini. Saat meminta input, ketik saja "hal-hal aneh" seperti yang ditunjukkan di bawah ini.

# bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }' 
the geek stuff

Karena kita tidak akan melihat output di stdout, kita harus melihat elasticsearch.

Buka URL berikut:

http://localhost:9200/_search?pretty

Di atas akan menampilkan semua pesan yang tersedia di elasticsearch. Anda akan melihat pesan yang kami masukkan dalam perintah logstash di atas di sini di output.

{ 
  "took" : 4, 
  "timed_out" : false, 
  "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
  }, 
  "hits" : { 
    "total" : 9, 
    "max_score" : 1.0, 
    "hits" : [ { 
      "_index" : "logstash-2014.07.06", 
      "_type" : "logs", 
      "_id" : "G3uZPQCMQ6ed4joNCuseew", 
      "_score" : 1.0, "_source" : {"message":"the geek stuff","@version":"1","@timestamp":"2014-07-06T18:09:46.612Z","host":"base"} 
    } ] 
  }

6. Input, Output, dan Codec Logstash

Input, Output, Codec, dan Filter adalah inti dari konfigurasi Logstash. Dengan membuat alur pemrosesan peristiwa, Logstash dapat mengekstrak data yang relevan dari log Anda dan membuatnya tersedia untuk elasticsearch, untuk mengkueri data Anda secara efisien.

Berikut ini adalah beberapa input yang tersedia. Input adalah mekanisme untuk meneruskan data log ke Logstash

  • file:membaca dari file pada sistem file, seperti perintah UNIX “tail -0a”
  • syslog:mendengarkan pada port 514 yang terkenal untuk pesan syslog dan mem-parsing menurut format RFC3164
  • redis:membaca dari server redis, menggunakan saluran redis dan juga daftar redis. Redis sering digunakan sebagai "broker" dalam instalasi Logstash terpusat, yang mengantrekan peristiwa Logstash dari "pengirim" Logstash jarak jauh.
  • penebang:memproses kejadian yang dikirim dalam protokol penebang. Sekarang disebut logstash-forwarder.

Berikut ini adalah beberapa filternya. Filter digunakan sebagai perangkat pemrosesan perantara dalam rantai Logstash. Mereka sering digabungkan dengan kondisi untuk melakukan tindakan tertentu pada suatu peristiwa, jika cocok dengan kriteria tertentu.

  • grok:mem-parsing teks arbitrer dan menyusunnya. Grok saat ini merupakan cara terbaik di Logstash untuk mengurai data log yang tidak terstruktur menjadi sesuatu yang terstruktur dan dapat ditanyakan. Dengan 120 pola yang disertakan dalam Logstash, kemungkinan besar Anda akan menemukan pola yang sesuai dengan kebutuhan Anda!
  • mutasi:Filter mutasi memungkinkan Anda melakukan mutasi umum ke bidang. Anda dapat mengganti nama, menghapus, mengganti, dan memodifikasi bidang di acara Anda.
  • jatuhkan:hapus acara sepenuhnya, misalnya, men-debug acara.
  • kloning:membuat salinan acara, mungkin menambahkan atau menghapus bidang.
  • geoip:menambahkan informasi tentang lokasi geografis alamat IP (dan menampilkan grafik menakjubkan dalam kibana)

Berikut ini adalah beberapa codec. Output adalah fase terakhir dari pipeline Logstash. Suatu peristiwa dapat melewati beberapa keluaran selama pemrosesan, tetapi setelah semua keluaran selesai, peristiwa tersebut telah menyelesaikan eksekusinya.

  • elasticsearch:Jika Anda berencana untuk menyimpan data Anda dalam format yang efisien, nyaman, dan mudah dikueri
  • file:menulis data acara ke file di disk.
  • grafit:mengirimkan data peristiwa ke grafit, alat sumber terbuka yang populer untuk menyimpan dan membuat grafik metrik
  • statsd:layanan yang “mendengarkan statistik, seperti penghitung dan penghitung waktu, dikirim melalui UDP dan mengirimkan agregat ke satu atau beberapa layanan backend yang dapat dipasang”.

7. Gunakan File Konfigurasi Logstash

Sekarang saatnya untuk berpindah dari opsi baris perintah ke file konfigurasi. Alih-alih menentukan opsi di baris perintah, Anda dapat menentukannya dalam file .conf seperti yang ditunjukkan di bawah ini:

# vi logstash-simple.conf 
input { stdin { } } 
output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

Sekarang mari kita minta logstast untuk membaca file konfigurasi yang baru saja kita buat menggunakan opsi -f seperti yang ditunjukkan di bawah ini. Untuk tujuan pengujian, ini masih menggunakan stdin dan stdout. Jadi, ketik pesan setelah memasukkan perintah ini.

# bin/logstash -f logstash-simple.conf 
This is Vadiraj
{ 
       "message" => "This is Vadiraj", 
      "@version" => "1", 
    "@timestamp" => "2014-11-07T04:59:20.959Z", 
          "host" => "base.thegeekstuff.com" 
}

8. Parsing Pesan Log Apache Input

Sekarang, mari kita lakukan sedikit konfigurasi lanjutan. Hapus semua entri dari file logstash-simple.conf dan tambahkan baris berikut:

# vi logstash-simple.conf 
input { stdin { } } 

filter { 
  grok { 
    match => { "message" => "%{COMBINEDAPACHELOG}" } 
  } 
  date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
  } 
} 

output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

Sekarang, jalankan perintah logstash seperti yang ditunjukkan di bawah ini:

# bin/logstash -f logstash-filter.conf

Tapi, kali ini, tempel contoh entri file log apache berikut sebagai input.

# bin/logstash -f logstash-filter.conf 
"127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0""

Output dari logstatsh akan menjadi sesuatu yang mirip dengan berikut ini:

{ 
    "message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", 
   "@version" => "1", 
 "@timestamp" => "2013-12-11T08:01:45.000Z", 
       "host" => "base.tgs.com", 
   "clientip" => "127.0.0.1", 
      "ident" => "-", 
       "auth" => "-", 
  "timestamp" => "11/Dec/2013:00:01:45 -0800", 
       "verb" => "GET", 
    "request" => "/xampp/status.php", 
"httpversion" => "1.1", 
   "response" => "200", 
      "bytes" => "3891", 
   "referrer" => "\"http://cadenza/xampp/navi.php\"", 
      "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"" 
}

Seperti yang Anda lihat dari output di atas, input kami diurai sesuai dan semua nilai dibagi dan disimpan di bidang yang sesuai.

Filter grok telah mengekstrak log apache dan telah dipecah menjadi bit-bit yang berguna sehingga suatu saat nanti kita dapat melakukan quey.

9. File Konfigurasi Logstash untuk Log Kesalahan Apache

Buat file konfigurasi logstash berikut untuk file apache error_log.

# vi logstash-apache.conf 
input { 
  file { 
    path => "/var/log/httpd/error_log" 
    start_position => beginning 
  } 
} 

filter { 
  if [path] =~ "error" { 
    mutate { replace => { "type" => "apache_error" } } 
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
  } 
  date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
  } 
} 

output { 
  elasticsearch { 
    host => localhost 
  } 
  stdout { codec => rubydebug } 
}

Dalam file konfigurasi di atas:

  • File input adalah /var/log/httpd/error_log dan posisi awal akan menjadi awal file.
  • Filter file input dan ganti nama (mutasi) apa pun dengan kesalahan sebagai apache_error. grok akan membuat apachelog gabungan di kolom pesan dan data akan menampilkan cap waktu dengan format yang diberikan.
  • Keluaran akan disimpan dalam elasticsearch di localhost dan digaungkan melalui stdout dalam format cetak ruby ​​dengan codec => rubydebug

10. File Konfigurasi Logstash untuk Log Kesalahan Apache dan Log Akses

Kita dapat menentukan piagam wild-card untuk membaca semua file log dengan *_log seperti yang ditunjukkan di bawah ini.

Namun, kita juga perlu mengubah kondisi yang sesuai untuk mengurai baik akses dan log kesalahan seperti yang ditunjukkan di bawah ini.

# vi logstash-apache.conf 
input { 
  file { 
    path => "/var/log/httpd/*_log" 
  } 
} 

filter { 
  if [path] =~ "access" { 
    mutate { replace => { type => "apache_access" } } 
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
    date { 
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    } 
  } else if [path] =~ "error" { 
    mutate { replace => { type => "apache_error" } } 
  } else { 
    mutate { replace => { type => "random_logs" } } 
  } 
} 

output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

11. Siapkan Repositori Yum Tambahan

Pengujian selesai. Sekarang kita tahu bagaimana Logstash bekerja dengan elasticseach.

Kami akan menginstal yang berikut ini:

  • logstash – Server log pusat kami
  • Elasticsearch – Untuk menyimpan log
  • Redis – Untuk filter
  • Nginx – Untuk menjalankan Kibana
  • Kibana – Merupakan dasbor GUI yang indah dan menyatukan semuanya

Sebelum kita menginstal, siapkan repositori berikut:

# cd /etc/yum.repos.d/ 

# vi /etc/yum.repos.d/logstash.repo 
[logstash] 
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos 
gpgcheck=1 
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch 
enabled=1 

# vi /etc/yum.repos.d/elasticsearch.repo 
[elasticsearch] 
name=Elasticsearch
baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos 
gpgcheck=1 
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch 
enabled=1

Juga, atur repositori EPEL seperti yang telah kita bahas sebelumnya.

12. Instal Elasticsearch, Nginx dan Redis dan Logstash

Pertama-tama perbarui sistem dan kemudian instal logstash bersama dengan elasticsearch, redis dan nginx seperti yang ditunjukkan di bawah ini:

yum clean all 

yum update -y 

yum install -y install elasticsearch redis nginx logstash

13. Instal Kibana

Instal Kibana untuk dasbor seperti yang ditunjukkan di bawah ini:

cd /opt/ 
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz

tar -xvzf kibana-3.1.2.tar.gz 

mv kibana-3.1.2 /usr/share/kibana3

14. Konfigurasi Kibana

Kita harus memberitahu kibana tentang elasticsearch. Untuk ini, ubah config.js berikut.

# vi /usr/share/kibana3/config.js 
elasticsearch: "http://log.thegeekstuff.com:9200"

Di dalam file di atas, cari elasticsearch dan ubah “dev.kanbier.lan” di baris tersebut ke domain Anda (misalnya:log.thegeekstuff.com)

15. Siapkan Kibana untuk dijalankan dari Nginx

Kita juga harus membuat kibana untuk dijalankan dari server web nginx.

Tambahkan berikut ini ke nginx.conf

server { 
  listen                *:80 ; 

  server_name           log.thegeekstuff.com; 
  access_log            /var/log/nginx/kibana.myhost.org.access.log; 

  location / { 
    root  /usr/share/kibana3; 
    index  index.html  index.htm; 
  }

Juga, jangan lupa untuk mengatur alamat ip yang sesuai dari server Anda di file redis.conf.

16. Konfigurasi File Konfigurasi Logstash

Sekarang kita perlu membuat file konfigurasi logstash yang mirip dengan contoh file konfigurasi yang kita gunakan sebelumnya.

Kami akan menentukan jalur file log, port mana yang akan menerima log jarak jauh dan memberi tahu logstash tentang alat elasticsearch.

# vi /etc/logstash/conf.d/logstash.conf 
input { 
  file { 
   type => "syslogpath => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] 
   sincedb_path => "/opt/logstash/sincedb-access" 
  } 
  redis { 
    host => "10.37.129.8" 
    type => "redis-input" 
    data_type => "list" 
    key => "logstash" 
  } 
  syslog { 
    type => "syslog" 
    port => "5544" 
  } 
} 

filter { 
  grok { 
    type => "syslog" 
    match => [ "message", "%{SYSLOGBASE2}" ] 
    add_tag => [ "syslog", "grokked" ] 
  } 
} 

output { 
 elasticsearch { host => "log.thegeekstuff.com" } 
}"

17. Verifikasi dan Mulai Logstash, Elasticsearch, Redis, dan Nginx

Mulai semua layanan ini seperti yang ditunjukkan di bawah ini:

service elasticsearch start 

service logstash start 

service nginx start 

service redis start

18. Verifikasi GUI web Logstash

Buka browser dan buka nama server (host) yang digunakan dalam file konfigurasi di atas. Misalnya:log.thegeekstuff.com

Anda akan melihat grafik yang mirip dengan berikut ini, tempat Anda dapat memanipulasi, menelusuri, menelusuri semua file log yang dikumpulkan oleh logstash.

Sekarang setelah server log siap, Anda hanya perlu meneruskan file log server jauh yang dikelola oleh rsyslog ke server pusat ini dengan memodifikasi file rsyslog.conf.


Linux
  1. Cara Mengamankan Nginx dengan Letsencrypt di Rocky Linux/Centos 8

  2. Cara Instal ModSecurity dengan Nginx di Rocky Linux 8

  3. Cara Setup Rsync dengan SSH di UNIX/Linux (rsync tanpa password)

  1. Cara Mengatur NGINX yang Sangat Tersedia dengan KeepAlived di Linux

  2. Bagaimana cara Setup Rsync tanpa kata sandi dengan SSH di UNIX / Linux?

  3. Bagaimana cara memeriksa kata sandi dengan Linux?

  1. Cara Mengatur Login SSH Tanpa Kata Sandi di Linux dengan Kunci

  2. Cara Mengatur NGINX yang Sangat Tersedia dengan KeepAlived di CentOS 8

  3. Cara Mengatur Pengakhiran SSL Varnish dengan server Web Nginx di Rocky Linux 8