Pada 22 Juni 2017, Nginx merilis aplikasi pemantau performa (application performance monitoring) Nginx Amplify dari private beta menjadi public beta.
Sebagai pengguna Nginx, saya pun tertarik dan segera mencoba aplikasi Nginx Amplify untuk mengetahui performa Nginx secara real time, memudahkan troubleshooting jika terjadi error, memberikan rekomendasi performa dan keamanan, dan mengeset pemberitahuan jika terjadi sesuatu.
Walau saya sudah melakukan optimalisasi konfigurasi Nginx saya, namun saya tidak bisa melakukan benchmark dan memantau kinerja Nginx saya dengan lebih detail.
Nginx Amplify sangat mudah digunakan dan dipasang. Hanya meluangkan waktu sekitar 5 menit untuk memasangnya.
Nginx Amplify bisa digunakan pada Nginx dan Nginx Plus (berbayar). Saya menggunakan Nginx versi open source, sehingga langkah-langkah pemasangan yang saya lakukan ini tidak berlaku untuk Nginx Plus.
Untuk memasang Nginx Amplify, dibutuhkan Python 2.6 atau 2.7. Saat tulisan ini dibuat, Python 3 belum didukung.
Sebelum memasang, saya membuat akun Nginx Amplify untuk mendapatkan kunci API (API key) yang nanti digunakan saat melakukan instalasi. Akun Nginx Amplify bisa didapatkan dengan gratis.
Cara Kerja Nginx Amplify
Nginx Amplify merupakan layanan SaaS (Software as a Service) yang di-hosting di AWS public cloud. Nginx Amplify terdiri dari 3 komponen, yaitu agent, web UI, dan backend.
Agent Nginx Amplify merupakan aplikasi Python yang berfungsi mengumpulkan informasi dan memantau kinerja sistem. Data-data ini kemudian dikirim ke backend melalui SSL/TLS.
Web UI merupakan antarmuka berbasis web yang diakses melalui URL https://amplify.nginx.com berprotokol SSL/TLS (HTTPS).
Backend merupakan aplikasi yang melakukan pengolahan data, yang kemudian ditampilkan ke pengguna melalui antarmuka web atau mengirim pemberitahuan kepada pengguna bila terjadi sesuatu. Backend ini lah yang merupakan layanan SaaS yang ditawarkan oleh Nginx.
Nginx Amplify melakukan pemantauan pada sistem operasi, Nginx dan Nginx Plus, serta PHP-FPM.
Memasang Modul stub_status
Agar berfungsi maksimal, Nginx Amplify membutuhkan modul stub_status. Untuk menambahkan, saya membuat satu berkas konfigurasi /etc/nginx/conf.d/stub_status.conf
yang kemudian berkas ini dimuat oleh berkas konfigurasi utama.
Pastikan pada berkas konfigurasi utama /etc/nginx/nginx.conf
terdapat perintah untuk memuat seluruh berkas konfigurasi di direktori /etc/nginx/conf.d/
.
include /etc/nginx/conf.d/*.conf;
Saya menyimpan berkas konfigurasi stub_status
dengan nama sub_status.conf
yang isinya sebagai berikut.
server { listen 80; server_name 127.0.0.1; location /nginx_status { stub_status; allow 127.0.0.1; deny all; } }
Setelah disimpan, lakukan pengetesan konfigurasi dengan perintah nginx -t lalu muat ulang Nginx dengan perintah sudo service nginx reload.
Jika tidak ada masalah, periksa apakah modul stub_status telah terpasang dengan melakukan curl http://localhost/nginx_status. Jika berhasil, tampilannya akan terlihat seperti berikut.
$ curl http://localhost/nginx_status Active connections: 6 server accepts handled requests 3007030 3007030 4355501 Reading: 0 Writing: 2 Waiting: 4
Memasang Agen Nginx Amplify
Memasang agent Nginx Amplify sangat mudah. Pertama, unduh berkas instalasi dengan menggunakan perintah berikut.
$ curl -L -O https://raw.githubusercontent.com/nginxinc/nginx‑amplify‑agent/master/packages/install.sh
Kemudian, jalankan perintah instalasi dengan menyertakan kunci API yang didapat dari akun Nginx Amplify sebagai berikut.
$ sudo API_KEY='kunci_api_nginx_amplify' sh ./install.sh
Perintah ini akan menjalankan kurang lebih 15 langkah instalasi, di mana saat instalasi selesai, agen Nginx Amplify akan secara otomatis dieksekusi.
Setelah menunggu kurang lebih satu menit, hasil pemantaian agen Nginx Amplify bisa dilihat di antarmuka web dengan masuk menggunakan akun yang telah didaftarkan.
Menambahkan Informasi Detail
Untuk mendapatkan laporan detail, saya menambahkan beberapa baris konfigurasi dengan menambahkan beberapa informasi pada bagian format penulisan access.log
.
Selain itu, pencatatan kesalahan pada error log juga harus diset ke warn.
Berikut ini bagian dari /etc/nginx/nginx.conf
yang telah saya sesuaikan.
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$host" sn="$server_name" ' 'rt=$request_time ' 'ua="$upstream_addr" us="$upstream_status" ' 'ut="$upstream_response_time" ul="$upstream_response_length" ' 'cs=$upstream_cache_status'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; ... }
Memantau PHP-FPM
Agar PHP-FPM bisa dipantau oleh Nginx Amplify, pada berkas konfigurasi www.conf
(pada sistem yang saya gunakan berada di /etc/php/fpm/pool.d/www.conf
) dan mengaktifkan pm.status_path
.
... pm.status_path = /status ... listen.owner = www-data listen.group = www-data listen.mode = 0660 ..
Pastikan bahwa PHP-FPM dan Nginx menggunakan pengguna yang sama (saya menggunakan pengguna nginx
) sehingga agen Nginx Amplify bisa mengakses informasi PHP-FPM.
Setelah melakukan pengesetan, muat ulang PHP-FPM dengan perintah sudo service php-fpm restart (perintah php-fpm
bisa sedikit berbeda, misal php7.1-fpm
).
Periksa apakah status PHP-FPM bisa terbaca dengan menggunakan perintah berikut cg-fcgi
. Jika perintah cg-fcgi
tidak ditemukan, pasang aplikasi tersebut dengan memasang paket libcgi-dev
.
$ sudo SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php/php7.1-fpm.sock Expires: Thu, 01 Jan 1970 00:00:00 GMT Cache-Control: no-cache, no-store, must-revalidate, max-age=0 Content-type: text/plain;charset=UTF-8 pool: www process manager: dynamic start time: 24/Jun/2017:04:27:19 +0700 start since: 3 accepted conn: 2 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 0 active processes: 2 total processes: 2 max active processes: 2 max children reached: 0 slow requests: 0
Pastikan agen Nginx Amplify bisa membaca konfigurasi PHP-FPM, dengan mengeset pada berkas konfigurasi /etc/amplify-agent/agent.conf
berikut.
[extensions] phpfpm = True
Untuk memastikan agen Nginx Amplify membaca konfigurasi yang baru, lakukan perintah untuk memuat ulang sudo service amplify-agent restart.
Duh kok malah mumet aku :)))