Logging apache web server menggunakan ELK Stack
oke jadi disini saya akan bercerita sedikit bagaimana caranya untuk logging apache web server ke Elasticsearch dan nantinya divisualisasikan di kibana. Pertama tama adalah install elasticsearch dan juga kibana.
update sistem dan install beberapa depedencies
sudo apt update -y & apt install -y openjdk-11-jre \
apt-transport-https \
curl \
wget
Download and install the public signing key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
tambahkan repositori elasticsearch
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
install elasticsearch
sudo apt-get update && sudo apt-get -y install elasticsearch
jalankan layanan elasticsearch
sudo systemctl start elasticsearch.service
sudo systemctl enable elasticsearch.service
setelah itu konfigurasi elasticsearch agar bisa diakses dari luar
sudo nano /etc/elasticsearch/elasticsearch.yml# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery ----------------------------------
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
kemudian restart layanan tersebut
sudo systemctl restart elasticsearch
sudo systemctl status elasticsearch
dan coba akses via website ataupun tes menggunakan curl
contoh http://IPServer:9200
lalu lanjut ke installasi kibana
sudo apt-get install -y kibana
jalankan kibana
sudo systemctl start kibana
sudo systemctl enable kibana
sudo systemctl status kibana
konfigurasi lagi agar kibana bisa diakses dari luar, dan restart kibana agar konfigurasi diterapkan
sudo nano /etc/kibana/kibana.yml...
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "0.0.0.0"
...sudo systemctl restart kibana
untuk verifikasi berjalan nya kibana
sudo apt install -y net-tools
netstat -tulpn | grep 5601
kibana berjalan pada port 5601 secara default, saat proses memulai atau running biasanya dibutuhkan waktu sekitar 30 detik atau mungkin 1 menit untuk kibana agar benar benar bisa diakses, ketikan saja IPmesin:5601 via web.
jika kedua service tersebut telah diinstall maka terakhir kita butuh beats yang berperan nantinya mengirimkan log dari apache web server ke elasticsearch sebelum divisualisasikan di kibana.
dimanakah kita harus menginstall beat? yaitu pada server yang ingin log yang dikirim kan atau dikumpulkan di elasticsearch. contoh disini saya ingin dua server ubuntu, log dari apache web server nya terkumpul di server yang telah diinstall elasticsearch dan kibana.
diatas ini kira kira topologi gambaran yang saya gunakan, yaitu ada dua buah web server yang log nya akan dikirimkan ke elasticsearch menggunakan bantuan beats yaitu filebeat. setelah data atau log tersimpan di elasticsearch maka nanti tinggal divisualisasikan di kibana.
oke selanjutnya adalah tahap installasi beats atau filebeat yang diinstall di server server yang menjalankan apache web server
seperti biasa install beberapa dependencies terlebih dahulu yang dibutuhkan
sudo apt install -y openjdk-11-jre \
apt-transport-https \
curl \
wget
download dan install Public Signing Key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
tambahkan repositori
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
install filebeat
sudo apt-get update && sudo apt-get install filebeat
konfigurasi di dalam filebeat menentukan tujuan log yang akan dikirim
nano /etc/filebeat/filebeat.ymlsetup.kibana:
host: "172.23.3.58:5601"#---------------- Elasticsearch Output ---------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["172.23.3.58:9200"]
kita bisa lohat list modul dari filebeat, jika terdapat apache maka aktifkan
filebeat modules list
aktifkan modul apache
filebeat modules enable apache2
lalu arahkan letak file log yang akan dikirimkan
nano /etc/filebeat/modules.d/apache2.yml# Module: apache
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.17/filebeat-module-apache.html- module: apache2
# Access logs
access:
enabled: true# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/var/log/apache2/access.log"]# Error logs
error:
enabled: true# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/var/log/apache2/error.log"]
setelah itu save dan exit, dan jalankan filebeat
filebeat setupfilebeat -e2022-08-21T08:10:29.832Z INFO instance/beat.go:425 filebeat stopped.
2022-08-21T08:10:29.832Z ERROR instance/beat.go:1014 Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data).
Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data).jika mengalami error seperti diatas coba untuk matikan service filebeat nya dan ulangi perintah filebeat -e
setelah itu maka log sudah bisa dilihat dikibana
selanjutnya kita akan mencoba metricbeat
installasi Metricbeat
apt install metricbeat -y
systemctl enable metricbeat
konfigurasi layanan metricbeat agar mengirim log nya nanti ke elasticsearch
nano /etc/metricbeat/metricbeat.ymlsetup.kibana:
host: "172.23.3.58:5601"#---------------- Elasticsearch Output ---------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["172.23.3.58:9200"]
list module dari metricbeat yang tersedia, disable module system lalu enable module apache
metricbeat modules list
metricbeat modules disable system
metricbeat modules enable apache
konfigurasi module apache di metricbeat
nano /etc/metricbeat/modules.d/apache.yml# Module: apache
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.17/metricbeat-module-apache.html- module: apache
metricsets:
- status
period: 10s
hosts: ["http://127.0.0.1"]
#username: "user"
#password: "secret"
lalu test konfigurasi
metricbeat test outputelasticsearch: http://172.23.3.58:9200...
parse url... OK
connection...
parse host... OK
dns lookup... OK
addresses: 127.0.0.1
dial up... OK
TLS... WARN secure connection disabled
talk to server... OK
version: 7.17.6
jalankan pengiriman log metrics apache
metricbeat setupmetricbeat -e
lalu di dashboard kibana cari metric apache
kita juga bisa monitor dari sisi lain
nano /etc/apache2/apache2.conf<Location /server-status>
SetHandler server-status
Options FollowSymLinks
AllowOverride None
Require all granted
</Location>
restart service apache untuk menerapkan konfigurasi
systemctl restart apache2
lalu akses IP/server-status