Postingan

Pengaturan Instalasi Loki dan Promtail

Pengaturan Instalasi Loki dan Promtail

Arsitektur Sistem pada Project

Implementasi projects ini akan dibangun menggunakan existing infrastructure atau infrastruktur yang sudah ada. Berikut merupakan gambaran dari arsitektur dari infrastruktur sistem yang ada.

project-loki Arsitektur Project Loki

Projects ini merupakan VM-based, jadi tidak menggunakan Docker atau container engine lain dalam penerapannya. Setiap satu ikon merepresentasikan sebuah server atau node yang berupa VM (Virtual Machine).

Walaupun project-nya VM-based, tidak akan ada perbedaan yang signifikan bila coba diterapkan dengan menggunakan Docker.

Informasi Lingkungan Project

Semua sistem operasi yang terdapat pada VM yang ada menggunakan Ubuntu LTS versi 22.04. Berikut beberapa informasi terkait lingkungan perangkat lunak projects yang digunakan.

SistemNama Aplikasi/Tools/dsbDeskripsiVersi
Database (Server Target)MongoDB Community EditionServer target untuk mengirim log slow query MongoDB ke Loki.4.4.x
Reverse Proxy (Server Target)NginxServer target untuk mengirim log web server Nginx ke Loki.1.18.0
LoggingLokiTool untuk sistem logging terpusat.3.0.0
Log AgentPromtailTool untuk mengirim log dari server target ke Loki.3.0.0
Object Storage (S3-Compatible)IDCloudHostServis untuk menyimpan log secara terpusat.-

Pastikan sistem di atas sudah tersedia sebelum mengikuti instruksi-instruksi selanjutnya. Alternatif lain untuk IDCloudHost object storage, kita bisa menggunakan object storage lain selama S3-compatible, beberapa diantaranya, kita dapat menggunakan Minio, DigitalOcean Space, atau AWS S3. Project ini juga bisa dijalankan menggunakan diska bawaan dari VM/VPS tempat loki berada tanpa memerlukan object storage.

Instalasi Loki

Berikut merupakan langkah-langkah proses instalasi Loki.

  1. Buat system user untuk menjalankan Loki.

    1
    
     sudo useradd --system loki
    
  2. Unduh file Loki. Sesuai informasi di atas, versi yang digunakan adalah 3.0.0.

    1
    
     wget https://github.com/grafana/loki/releases/download/v3.0.0/loki-linux-amd64.zip
    
  3. Ekstrak file Loki yang barusan diunduh.

    1
    
     unzip loki-linux-amd64.zip
    
  4. Salin file binari Loki sebelumnya ke direktori /usr/local/bin/.

    1
    
     sudo cp loki-linux-amd64 /usr/local/bin/loki
    
  5. Buat file pengaturan Loki sebagai systemd.

    1
    
     sudo nano /etc/systemd/system/loki.service
    
  6. Isi file tersebut dengan script berikut.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     [Unit]
     Description=Loki service
     After=network.target
    
     [Service]
     Type=simple
     User=loki
     ExecStart=/usr/local/bin/loki -config.file /etc/loki/loki-local-config.yaml
    
     [Install]
     WantedBy=multi-user.target
    
  7. Buat direktori untuk menyimpan file pengaturan Loki.

    1
    2
    
     mkdir -p /etc/loki
     cd /etc/loki
    
  8. Unduh file pengaturan default Loki.

    1
    
     wget https://raw.githubusercontent.com/grafana/loki/v3.0.0/cmd/loki/loki-local-config.yaml
    
  9. Buat direktori untuk penyimpanan data Loki.

    1
    2
    
     cd
     sudo mkdir -p /loki /data /data/retention
    
  10. Atur permission file maupun direktori terkait Loki.

    1
    2
    
    sudo chown loki:loki /usr/local/bin/loki
    sudo chown -R loki:loki /loki /etc/loki /data
    
  11. Reload pengaturan systemd. Start lalu enable Loki.

    1
    2
    3
    4
    
    sudo systemctl daemon-reload
    sudo systemctl start loki.service
    sudo systemctl enable loki.service
    sudo systemctl status loki.service
    
  12. Atur agar Loki hanya bisa diakses melalui Grafana. Dalam kasus ini, server menggunakan pengaturan firewall ufw.

    1
    
    sudo ufw allow from <ip-address> to any port 3100
    

    Gunakan IP private dari server Grafana.

File Pengaturan Loki

Buka file pengaturan default Loki yang sudah diunduh sebelumnya.

1
sudo nano /etc/loki/loki-local-config.yaml

Lalu isi dan sesuaikan dengan script dibawah ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# This is a complete configuration to deploy Loki backed by a s3-compatible API
# like MinIO for storage.
# Index files will be written locally at /loki/index and, eventually, will be shipped to the storage via tsdb-shipper.

auth_enabled: false

server:
  http_listen_port: 3100

common:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory
  replication_factor: 1
  path_prefix: /loki

schema_config:
  configs:
  - from: 2020-05-15
    store: tsdb
    object_store: s3
    schema: v13
    index:
      prefix: index_
      period: 24h

storage_config:
 tsdb_shipper:
   active_index_directory: /loki/index
   cache_location: /loki/index_cache
 aws:
   bucketnames: <nama-bucket>
   endpoint: is3.cloudhost.id
   access_key_id: <access-key>
   secret_access_key: <secret-key>
   s3forcepathstyle: true
 filesystem:
   directory: /loki/chunks

limits_config:
  max_query_lookback: 168h # 7 days
  retention_period: 168h
  max_query_series: 10000000
  max_query_parallelism: 2

compactor:
  working_directory: /data/retention
  retention_enabled: true
  delete_request_store: s3

ruler:
  alertmanager_url: http://localhost:9093

Keterangan:

Berikut beberapa keterangan pengaturan dari isi script di atas.

  • http_listen_port: Port yang digunakan untuk menajalankan Loki di server.
  • path_prefix: Direktori penyimpanan data terkait Loki di server.
  • schema_config -> configs -> object_store: Tipe penyimpanan log pada Loki. Gunakan nilai filesystem jika ingin menggunakan diska pada server VM Loki terinstal. Gunakan nilai s3 jika ingin menggunakan object storage AWS S3 maupun selain AWS S3 tapi S3-compatible.
  • storage_config -> aws -> bucketnames: Nama bucket object storage.
  • storage_config -> aws -> endpoint: Nama endpoint dari bucket object storage yang dibuat.
  • storage_config -> aws -> access_key_id: Access key dari bucket object storage yang dibuat.
  • storage_config -> aws -> secret-access-key: Secret key dari bucket object storage yang dibuat.
  • limits_config -> retention_period: Lama retensi files log disimpan di object storage.
  • limits_config -> max_query_series: Banyak log yang bisa diambil dalam satu kueri.
  • compactor -> retention_enabled: Mengaktifkan masa retensi penyimpanan log.

Instalasi Promtail

Sebelum mengikuti instruksi di bawah, pastikan Anda berada di server target. Berikut merupakan langkah-langkah proses instalasi Promtail.

Pastikan Promtail diinstal di server target, dalam kasus ini diinstal di dalam server yang terdapat servis Nginx maupun MongoDB.

  1. Unduh file Promtail. Versi yang digunakan adalah 3.0.0.

    1
    
     wget https://github.com/grafana/loki/releases/download/v3.0.0/promtail-linux-amd64.zip
    
  2. Ekstrak file Promtail yang barusan diunduh.

  3. Salin file binari Promtail sebelumnya ke direktori /usr/local/bin/.

  4. Buat file pengaturan Promtail sebagai systemd.

    1
    
     sudo nano /etc/systemd/system/promtail.service
    
  5. Isi file tersebut dengan script berikut.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     [Unit]
     Description=Promtail service
     After=network.target
    
     [Service]
     Type=simple
     User=root
     ExecStart=/usr/local/bin/promtail -config.file /etc/promtail/promtail-local-config.yaml
    
     [Install]
     WantedBy=multi-user.target
    
  6. Buat direktori untuk menyimpan file pengaturan Promtail.

    1
    2
    
     mkdir -p /etc/promtail
     cd /etc/promtail
    
  7. Unduh file pengaturan default Promtail.

    1
    
     wget https://raw.githubusercontent.com/grafana/loki/v3.0.0/clients/cmd/promtail/promtail-local-config.yaml
    
  8. Reload pengaturan systemd. Start lalu enable Promtail.

    1
    2
    3
    4
    
     sudo systemctl daemon-reload
     sudo systemctl start promtail.service
     sudo systemctl enable promtail.service
     sudo systemctl status promtail.service
    
  9. Masuk ke server Loki. Atur agar Promtail hanya bisa diakses melalui server Loki. Dalam kasus ini, server menggunakan pengaturan firewall ufw.

    1
    
     sudo ufw allow from <ip-address> to any port 3100
    

    Gunakan IP private dari server target tempat Promtail terinstal.

Integrasi Loki ke Grafana

Pastikan Grafana sudah tersedia sebelum masuk ke tahap ini. Berikut merupakan langkah integrasi Loki ke Grafana.

  1. Masuk ke server Loki. Atur agar Loki hanya bisa diakses melalui server Grafana melalui firewall.

    1
    
     sudo ufw allow from <ip-address> to any port 3100
    

    Gunakan IP private dari server Grafana.

  2. Masuk ke aplikasi Grafana. Lalu, pada bagian navigasi menu di sebelah kiri aplikasi Grafana, pilih Add new connection di bagian Connection.

  3. Search dan pilih Loki. Lalu klik Add new data source.

  4. Isi pengaturan Name dengan loki (silakan sesuaikan dengan keinginan). Lalu isi juga pengaturan URL di bagian Connection dengan format http://<ip-private-server-loki>:3100. Biarkan sisa pengaturan lain dengan nilai default.

  5. Klik Save & test. Pastikan muncul pemberitahuan “Data source successfully connected.” yang menunjukkan bahwa integrasi Loki ke Grafana berhasil.

Postingan ini dilisensikan di bawah CC BY 4.0 oleh penulis.