Logging apache web server menggunakan ELK Stack

Yudi putra wiratama
5 min readAug 21, 2022

--

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

--

--