Untuk memantau kinerja server dari jarak jauh, para profesional menggunakan sistem perangkat lunak khusus, seperti
Zabbix atau
Icinga . Tetapi, jika Anda adalah pemilik pemula atau administrator dari satu atau dua situs web dengan beban kecil, maka tidak perlu untuk sistem pemantauan besar. Parameter utama adalah apakah situs dengan cepat melayani pengguna. Oleh karena itu, Anda dapat memantau pekerjaan situs menggunakan program sederhana dari komputer mana pun yang terhubung ke Internet.

Mari tulis skrip ini sekarang - pemantauan paling sederhana atas ketersediaan dan kecepatan situs. Program ini bisa dijalankan di komputer rumah, smartphone, dan sebagainya. Program ini hanya memiliki dua fungsi:
- menunjukkan pada layar waktu di mana situs Anda memberikan halaman kepada pengguna,
- dalam hal respons lambat dari situs atau kesalahan, program menulis data ke file ("log", atau file log). Data ini layak diperiksa dari waktu ke waktu untuk memperbaiki masalah ketika mereka baru memulai. Oleh karena itu, kami akan berhati-hati untuk mencatat log ini dalam bentuk yang jelas dan mudah untuk dilihat cepat.
Saya akan menjelaskan setiap langkah secara terperinci sehingga bahkan seorang pemula yang hanya sedikit terbiasa dengan menulis file batch (bat dan cmd pada DOS dan Windows, sh pada sistem seperti UNIX) dapat mengetahuinya tanpa masalah dan dapat menyesuaikan skrip dengan kebutuhannya.
Tetapi saya meminta Anda untuk tidak menggunakan skrip ini tanpa berpikir, karena jika digunakan secara tidak benar, ini mungkin tidak memberikan hasil yang tepat dan, di samping itu, menelan banyak lalu lintas .
Saya akan menjelaskan skrip untuk sistem operasi seperti Linux dan penggunaannya pada komputer di rumah. Dengan prinsip yang sama, ini bisa dilakukan pada platform lain. Dan bagi mereka yang hanya melihat kemungkinan Linux, satu contoh lagi mungkin menarik, betapa sederhana dan kuatnya skripnya.
1. Organisasi dulu
Kami akan membuat folder terpisah untuk program ini dan membuat 3 file di dalamnya. Sebagai contoh, saya memiliki folder ini / home / me / Progs / iNet / monitor (di sini saya adalah nama pengguna saya, Progs / iNet adalah folder saya untuk program yang berhubungan dengan Internet, dan monitor adalah nama program ini, dari kata monitor, yaitu. Karena saya adalah satu-satunya pengguna komputer ini, saya menyimpan file-file tersebut di antara folder pribadi saya (/ home) di bagian terpisah dari disk, yang memungkinkan saya untuk menyimpannya ketika menginstal ulang sistem). Di folder ini akan ada file:
- README.txt - di sini adalah deskripsi (dalam kasus sklerosis): program apa, latar belakang informasi untuk itu, dll.
- mon.sh - akan ada program yang polling situs.
- server.log - ini dia akan mencatat indikator status situs. Dalam kasus kami, ini hanyalah tanggal, waktu, dan durasi respons situs (ditambah informasi tambahan jika server merespons dengan kesalahan dengan permintaan kami).
(Untuk kenyamanan mengedit dan, jika ada, memulihkan file, Anda dapat memasukkan folder ini dalam sistem kontrol versi Git; di sini saya tidak akan menjelaskannya).
2. Terus-menerus dan santai
Kami akan menjalankan file mon.sh dengan interval kecil reguler, misalnya, 60 detik. Saya menggunakan alat standar yang disediakan oleh sistem operasi (lebih tepatnya, lingkungan desktop).
Lingkungan Desktop saya adalah Xfce. Ini adalah salah satu opsi paling populer untuk Linux. Saya suka Xfce karena memungkinkan Anda untuk hampir sepenuhnya menyesuaikan seluruh lingkungan - seperti yang Anda suka. Pada saat yang sama, Xfce agak lebih kompak dan lebih cepat daripada dua sistem terkenal lainnya - Gnome dan KDE. (Pilihan lain juga menarik - misalnya, lingkungan LXDE bahkan lebih cepat dan lebih mudah daripada Xfce, tetapi sejauh ini tidak begitu kaya fitur).
Alat yang kami butuhkan, dalam kasus Xfce, adalah plug-in untuk panel kerja Generic Monitor. Biasanya sudah terinstal, tetapi jika tidak, Installer akan dengan mudah menemukannya: "Genmon" (deskripsi:
xfce4-genmon-plugin ). Ini adalah plugin yang dapat ditambahkan ke panel dan diatur dalam pengaturan: (1) perintah yang akan dieksekusi dan (2) frekuensi eksekusi dalam hitungan detik. Dalam kasus saya, perintah:
/home/me/Progs/iNet/monitor/mon.sh
(atau, yang setara, ~ / Progs / iNet / monitor / mon.sh).

3. Ketika program belum ada kesalahan
Jika Anda telah menyelesaikan semua langkah ini sekarang - membuat file dan meluncurkan plug-in di panel - maka Anda melihat hasil dari peluncuran program kami di sana (pesan kesalahan: file mon.sh bukan program). Kemudian, untuk membuat file dapat dieksekusi, buka folder kami dan atur izin untuk menjalankan -
- atau pengelola file: Properti - Izin - Izinkan file ini dijalankan sebagai program;
- atau perintah dari terminal: chmod 755 mon.sh
Dan dalam file itu sendiri, kita menulis baris pertama:
Alih-alih "example.ru" menggantikan nama situs Anda, negara yang akan Anda amati. Dan jika itu bekerja di http, masukkan http bukan https. Baris #! / Bin / bash berarti ini adalah skrip yang akan diluncurkan oleh program Bash (
bash mungkin yang paling umum untuk mengeksekusi skrip di Linux). Untuk bekerja melalui shell lain, ini ditunjukkan sebagai ganti Bash. Baris yang tersisa dengan tajam di awal adalah komentar. Baris pertama dari kode itu sendiri adalah
info = $ () dan dalam tanda kurung ini adalah perintah curl dengan parameter. Konstruksi seperti itu - something = $ (something) - berarti "jalankan perintah dalam tanda kurung dan tetapkan hasilnya ke variabel di sebelah kiri." Dalam hal ini, saya menamakan variabel "info". Perintah ini dalam tanda kurung - curl (dalam jargon disebut oleh beberapa orang sebagai "Kurl") - mengirimkan permintaan ke jaringan di alamat yang ditentukan dan mengembalikan respons server kepada kami. (Kenalan saya berkata, menjelaskan: "Bagaimana derek itu mendengus - dan menerima respons dari beberapa derek lain di langit.") Pertimbangkan opsi:
curl -I -o /dev/stdout -w '%{time_total}' --url https://example.ru/ -m 9 -s
-Aku berarti bahwa kami tidak meminta seluruh halaman, tetapi hanya "HTTP header" -nya. Setiap kali kami tidak membutuhkan seluruh teks halaman untuk memastikan bahwa situs tersebut berfungsi. Karena kita akan sering memeriksa situs, penting untuk membuat ukuran data yang dikirimkan sekecil mungkin. Ini menghemat lalu lintas, dan listrik, dan beban di server - dan satwa liar.
Omong-omong, perhatikan berapa banyak lalu lintas cadangan yang Anda miliki (tidak digunakan per bulan) di hosting. Di bawah ini Anda akan melihat berapa banyak data yang dikirimkan dan Anda dapat menghitung jika Anda memiliki cadangan yang cukup; jika ada, periode verifikasi situs dapat ditingkatkan menjadi 5, 10, atau bahkan 30-60 menit. Meskipun dalam hal ini gambar tidak akan begitu lengkap - dan gangguan kecil mungkin tidak diperhatikan; tetapi, secara umum, saat memantau situs, lebih penting untuk mendeteksi masalah jangka panjang daripada gangguan tunggal. Juga, lalu lintas apa yang dapat Anda beli di komputer pemanggil? Dalam kasus saya - PC desktop dengan lalu lintas tanpa batas - ini tidak begitu penting; tetapi untuk perangkat seluler atau tarif dengan batasan, ada baiknya menghitung dan, mungkin, meningkatkan interval inspeksi.
4. Langkah mengikuti langkah kecuali langkah pertama
Mari kita melangkah lebih jauh:
-o / dev / stdout berarti "mengirim respons yang diterima oleh Kurl dari server ke file ini dan itu." Dan dalam hal ini, ini bukan file pada disk, tetapi / dev / stdout - Perangkat output standar. Biasanya "perangkat output standar" adalah layar kita di mana kita dapat melihat hasil program. Namun dalam skrip, kita sering mengarahkan "output standar" ini untuk diproses lebih lanjut (sekarang - simpan ke variabel info). Dan kemudian kita akan, paling sering, mengirim hasil tim ke variabel, atau meneruskannya ke tim berikutnya dalam sebuah rantai. Untuk membuat rantai dari perintah, gunakan operator pipa ("Pipa"), ditampilkan sebagai bilah vertikal ("|").
-w '% {time_total} eyayu' : di sini -w berarti "memformat dan memberikan informasi tambahan ini dan itu ke perangkat output standar." Secara khusus, kami tertarik pada time_total - berapa lama waktu yang dibutuhkan oleh permintaan-tanggapan antara kami dan server. Anda mungkin tahu bahwa ada perintah yang lebih sederhana, ping, untuk dengan cepat meminta server dan mendapatkan respons darinya, pong. Tetapi Ping hanya memeriksa apakah server hostingnya hidup, dan sinyalnya bolak-balik begitu lama. Ini menunjukkan kecepatan akses maksimum, tetapi masih tidak memberi tahu kami apa pun tentang seberapa cepat situs menghasilkan konten nyata. Ping dapat bekerja dengan cepat, dan pada saat yang sama, situs dapat melambat atau tidak berfungsi sama sekali - karena beban tinggi atau beberapa masalah internal. Oleh karena itu, kami menggunakan Kurla persis dan mendapatkan waktu aktual server menampilkan konten kami.
(Dan dengan parameter ini Anda dapat menilai apakah server bekerja dengan efisien untuk tugas Anda, apakah waktu respons tipikalnya nyaman bagi pengguna. Apakah ada masalah - misalnya, situs saya di banyak situs hosting telah melambat dari waktu ke waktu, dan saya harus mencari hosting lain).
Pernahkah Anda memperhatikan huruf aneh "eyu" setelah {time_total}? Saya menambahkannya sebagai label unik, yang mungkin tidak akan berada di tajuk yang dikirimkan kepada kami dari server (walaupun dengan asumsi bahwa pengguna program Anda akan dan tidak akan buruk dan jalan menuju jurang. Jangan lakukan ini! .. Atau, ketika Anda melakukannya , setidaknya malu pada Anda). Dengan label ini (saya harap) kita dapat dengan mudah menarik potongan informasi yang kita butuhkan dari sejumlah baris dalam variabel info. Jadi,
curl -w '% {time_total} ehayu' (dengan parameter yang tersisa benar) akan memberi kita sesuatu seperti:
0.215238eyayu
Ini adalah jumlah detik yang diperlukan untuk mengakses situs, ditambah label kami. (Selain parameter ini, dalam variabel info, kami akan lebih tertarik pada "Kode status" - kode status, atau, sederhana saja, kode respons server. Biasanya, ketika server mengeluarkan file yang diminta, kode itu adalah "200". Ketika halaman tidak ditemukan , ini adalah 404 yang terkenal. Ketika ada kesalahan pada server, paling sering 500 dengan sesuatu).

5. Kreativitas - bapak pengujian diri
Parameter yang tersisa dari curl kami adalah sebagai berikut:
--url https://example.ru/ -m 9 -s
apa artinya: untuk meminta alamat ini dan itu; waktu respons maksimum adalah 9 detik (Anda dapat menetapkan lebih sedikit, karena pengguna yang jarang akan menunggu respons dari situs begitu lama, ia akan dengan cepat menemukan situs tidak berfungsi). Dan "-s" berarti diam, yaitu, ikal tidak akan memberi tahu kami detail yang tidak perlu.
Ngomong-ngomong, biasanya tidak ada banyak ruang pada panel desktop, oleh karena itu, untuk debugging skrip, lebih baik untuk menjalankannya dari terminal (dalam foldernya menggunakan perintah ./mon.sh). Dan untuk plugin panel kami, kami akan memberi jeda yang lama antara peluncuran perintah - katakanlah, 3600 detik.
Untuk debugging, kita dapat menjalankan ikal ini tanpa membingkai tanda kurung dan melihat apa yang dihasilkannya. (Dari ini dan hitung konsumsi lalu lintas). Kita akan melihat terutama satu set header HTTP, seperti:
HTTP/1.1 302 Found Server: QRATOR Date: Sun, 11 Feb 2019 08:06:57 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Keep-Alive: timeout=15 X-Powered-By: PHP/7.2.14-1+ubuntu16.04.1+deb.sury.org+1 Location: https://habr.com/ru/ X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=63072000; includeSubDomains; preload X-Cache-Status: HIT 0.033113
Baris pertama di sini kita melihat "HTTP / 1.1 302 Found" - yang berarti: protokol transfer data adalah "HTTP / 1.1", kode respons server adalah "302 Found". Saat meminta halaman lain, ini mungkin kode "301 Pindah Permanen", dll. Dalam contoh lebih lanjut, respons normal server saya adalah "HTTP / 2 200". Jika server Anda biasanya merespons secara berbeda, gantikan jawaban ini alih-alih “HTTP / 2 200” dalam skrip ini.
Baris terakhir, seperti yang kita lihat, Kurl memberi, dalam berapa detik kita menerima respons server, dengan label yang ditugaskan kepada kita.
Menarik: kami dapat mengonfigurasi situs sehingga melaporkan permintaan kami (dan hanya pada mereka!) Informasi tambahan tentang kondisinya - misalnya, di header HTTP "buatan sendiri". Katakanlah apa beban pada prosesor situs, berapa banyak memori bebas dan ruang disk yang dimilikinya, dan seberapa cepat database berfungsi. (Tentu saja, untuk ini situs harus dinamis, yaitu, permintaan harus diproses oleh program - dalam PHP, Node.JS, dll. Pilihan lain adalah menggunakan perangkat lunak khusus di server). Tapi mungkin kita belum benar-benar membutuhkan detail ini. Tujuan dari skrip ini adalah hanya untuk secara teratur memantau kinerja situs secara keseluruhan. Dalam hal terjadi masalah - kami akan menangani diagnostik dengan cara lain. Oleh karena itu, sekarang kami menulis skrip paling sederhana yang akan berfungsi untuk situs mana pun, bahkan yang statis, dan tanpa pengaturan tambahan di server. Di masa depan, jika diinginkan, dimungkinkan untuk memperluas kemampuan skrip; sementara itu, jadikan dasar.
String
errr = $ (echo $?) Berarti: tulis hasil dari perintah "echo $?" Ke variabel errr. Perintah echo berarti mencetak beberapa teks pada perangkat keluaran standar (stdout), dan karakter "$?" - Ini adalah kode kesalahan saat ini (tersisa dari perintah sebelumnya). Jadi, jika curl kami tiba-tiba tidak dapat mencapai server, itu akan memberikan kode kesalahan non-nol, dan kami akan mengetahuinya dengan memeriksa variabel errr.
6. Kegunaan
Di sini saya ingin membuat penyimpangan kecil dari masalah teknis untuk membuat membaca teks lebih menarik. (Jika Anda tidak setuju, lewati tiga paragraf). Saya akan mengatakan bahwa semua aktivitas manusia sesuai dengan caranya sendiri. Bahkan ketika seseorang dengan sengaja memukul dahinya ke dinding (atau di lantai ... pada keyboard ...), ini memiliki kebijaksanaannya sendiri. Misalnya, ia menyediakan jalan keluar bagi energi emosional - mungkin bukan dengan cara "terbaik", tetapi bagaimana ia bisa. (Ya, dan konsep "terbaik" tidak ada gunanya dari sudut pandang
saat ini di tempat ini - karena yang terbaik dan terburuk hanya mungkin dibandingkan dengan yang lain).
Saya menulis teks ini sekarang, daripada kasus yang tampaknya lebih penting bagi saya - mengapa? Pertama, untuk mengambil stok, meninjau dan secara internal memilah-milah rak dari apa yang saya pelajari dalam menulis skrip selama dua hari ini ... Hapus dari RAM dan simpan. Kedua, dengan cara ini saya sedikit istirahat ... Ketiga, saya berharap penjelasan yang dikunyah ini bermanfaat bagi orang lain (dan saya sendiri, mungkin suatu hari nanti). Bagaimana, tidak masalah jika yang terbaik, tetapi pengingat yang berbeda pada subjek skrip dan permintaan server.
Seseorang, mungkin, akan mengoreksi saya dalam sesuatu, dan hasilnya akan menjadi lebih baik. Seseorang akan mendapatkan informasi yang bermanfaat. Apakah ini pantas? Mungkin ... inilah yang bisa saya lakukan sekarang dan saya sedang melakukannya. Besok, mungkin saya akan bangun dan mengevaluasi kembali tindakan saat ini ... tetapi penilaian ulang ini juga akan memberikan sesuatu yang berguna untuk kehidupan selanjutnya.
Jadi, setelah memenuhi permintaan, kami memiliki dua bagian data:
- blok utama informasi dari server (jika, tentu saja, respons server datang), kami menulisnya ke dalam variabel info;
- kode kesalahan perintah curl (0, jika tidak ada kesalahan) - ditulis ke variabel errr.
Tepatnya karena kedua total - baik info dan kode kesalahan - diperlukan, saya menulisnya ke dalam variabel, dan tidak segera meneruskan total Kurl ke tim lain melalui Pipe. Tapi sekarang dalam skrip ini saatnya untuk memanjat pipa:
code=$(echo "$info" | grep HTTP | grep -v 'HTTP/2 200') date=$(echo "$info" | grep -i 'date:') dlay=$(echo "$info" | grep | sed -e 's///')
Di setiap baris ini kita menulis variabel lain - kita menyimpan hasil dari eksekusi perintah. Dan dalam setiap kasus itu bukan satu tim, tetapi sebuah rantai; tautan pertama adalah sama di mana-mana:
echo "$ info" - mengembalikan ke aliran perangkat keluaran standar (stdout) blok informasi yang kami simpan, terima dari curl. Lebih jauh ke bawah pipa, aliran ini diteruskan ke perintah grep. Grep memilih dari semua garis hanya yang cocok dengan pola. (Opsi -i berarti "tidak sensitif huruf"). Seperti yang Anda lihat, dalam kasus pertama kita memilih baris yang berisi "HTTP". Baris ini, ditarik dari tumpukan yang lain, dilewatkan melalui pipa ke perintah
grep -v 'HTTP / 2 200' . Di sini,
opsi -v adalah kebalikan dari opsi
-e , itu menyaring garis di mana pola seperti itu ditemukan. Total, dalam variabel kode akan ada garis dengan kode respons server (seperti "HTTP / 1.1 302 Found"), tetapi hanya jika bukan 'HTTP / 2 200'. Jadi saya menyaring baris yang dikirim situs saya dalam kasus normal, dan hanya menyimpan jawaban "tidak normal". (Jika Anda memiliki respons server normal, gantikan di sana).
Demikian pula, pada tanggal variabel kita menulis baris di mana server mengeluarkan tanggal dan waktu saat ini. Ini adalah sesuatu seperti "
date: Sun, 11 Feb 2019 08:06:57 GMT " (biasanya di zona waktu GMT, alias UTC). Kita perlu menulis tanggal (tetapi hanya sekali sehari!) Dalam file log kita ("server status log") - server.log. Dan pada saat yang sama kami akan menampilkan waktu ini di layar. Anda dapat menulis tanggal-waktu ke log dari komputer Anda, tetapi untuk kenyamanan kami mengambilnya, karena server tetap mengirimkannya.
Ini mirip dengan variabel ketiga kami, dlay (dari kata Inggris delay - delay). Kami memilih baris di label tender kami "eeyu" di mana kami menyimpan durasi menunggu jawaban dari server. Kami menghapus label ini, yang tidak lagi diperlukan, menggunakan perintah
sed - dan menyimpan hasilnya.
Sekarang, jika kita mencetak variabel-variabel ini untuk verifikasi - misalnya, menambahkan baris ke skrip kita:
printf 'errr: %s\n' "$errr" printf 'code: %s\n' "$code" printf '%s\n' "$date" printf 'dlay: %s\n' "$dlay"
Anda harus mendapatkan sesuatu seperti:
errr: 0 code: date: Mon, 11 Feb 2019 12:46:18 GMT dlay: 0.236549
Total: kode kesalahan curl adalah nol (yang berarti itu berfungsi dengan baik). Kode status server - tidak direkam (seperti biasa). Tanggal dan waktu. Durasi respons. Tetap menampilkan dengan benar apa yang Anda butuhkan di layar dan, jika perlu, menulis ke file.
Ini yang paling menarik: apa, dalam kondisi apa dan bagaimana cara merekam?
7. Kesimpulan yang rumit
Agar tidak membuat Anda bosan dengan lebih banyak detail, saya akan memberi tahu Anda secara singkat (dan ada cukup
direktori yang bagus pada semua perintah ini di Internet). Omong-omong, singkatnya adalah salah satu tujuan utama yang akan kita capai ketika menulis ke log ini. Maka akan nyaman untuk dilihat, dan tidak akan pernah mengambil banyak ruang disk (tidak seperti log lain yang tumbuh dalam megabyte per hari).
Pertama: kami pastikan untuk menulis tanggal hanya sekali, dan tidak pada setiap baris. Untuk melakukan ini, pilih dari tanggal variabel kami secara individual tanggal saat ini (arus) dan waktu (waktu):
curr=$(echo "$date" | sed -e 's/\(20[0-9][0-9]\).*$/\1/') time=$(echo "$date" | sed -e 's/^.*\ \([0-9][0-9]:.*\)\ GMT\r$/\1/')
Dan kami juga mempertimbangkan baris dengan tanggal dari file log dan mengambil tanggal terakhir (sebelumnya):
prev=$(cat /home/me/Progs/iNet/monitor/site.log | grep -e 'date:' | tail -1)
Jika tanggal kami saat ini (arus) tidak sama dengan yang sebelumnya (dari file, sebelumnya), maka hari baru telah datang (atau, katakanlah, file log kosong); kemudian tulis tanggal baru ke file:
if [[ $curr != $prev ]]; then printf '%s\n' "$curr" >>/home/me/Progs/iNet/monitor/site.log printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
... dan pada saat yang sama kami mencatat informasi saat ini: waktu, keterlambatan dalam menerima respons dari situs, kode respons situs (jika tidak biasa):
printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
Ini akan membantu menavigasi: hari ini dan itu dimulai dengan kecepatan situs ini dan itu. Dalam kasus lain, jangan mengacaukan file dengan entri yang tidak perlu. Tentu saja, kami akan menuliskannya jika kami mendapatkan kode status server yang tidak biasa:
elif [[ -n $code ]]; then printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
Dan juga tulis jika waktu respons server lebih lama dari biasanya. Situs saya biasanya bertanggung jawab untuk 0,23-0,25 detik, jadi saya mencatat jawaban yang membutuhkan waktu lebih dari 0,3 detik:
elif (( $(echo "$dlay > 0.3" | bc -l) )); then printf '%s %s\n' "$time" "$dlay" >>/home/me/Progs/iNet/monitor/site.log
Akhirnya, sekali satu jam, saya hanya merekam waktu yang diterima dari server - sebagai tanda bahwa itu hidup, dan pada saat yang sama sebagai semacam markup file:
else echo "$time" | grep -e :00: | cat >>/home/me/Progs/iNet/monitor/site.log fi
Kami mendapatkan konten file di mana markup dengan catatan per jam membantu secara visual, tanpa membaca, untuk melihat kapan beban lebih tinggi atau lebih rendah (lebih banyak catatan per jam):
19:42:28 0.461214 19:53:29 0.443956 20:00:29 20:09:30 2.156462 20:10:29 0.358294 20:45:29 0.313378 20:51:30 0.563886 20:54:30 0.307219 21:00:30 0.722343 21:01:30 0.310284 21:09:30 0.379662 21:10:31 1.305779 21:12:35 5.799455 21:23:31 1.054537 21:24:31 1.230391 21:40:31 0.461266 21:42:37 7.140093 22:00:31 22:12:37 5.724768 22:14:31 0.303500 22:42:37 5.735173 23:00:32 23:10:32 0.318207 date: Mon, 11 Feb 2019 00:00:34 0.235298 00:01:33 0.315093 01:00:34 01:37:41 5.741847 02:00:36 02:48:37 0.343234 02:56:37 0.647698 02:57:38 1.670538 02:58:39 2.327980 02:59:37 0.663547 03:00:37 03:40:38 0.331613 04:00:38 04:11:38 0.217022 04:50:39 0.313566 04:55:45 5.719911 05:00:39
Dan akhirnya, kami menampilkan informasi di layar. Dan juga, jika curl gagal, kami menampilkan dan menulis pesan tentang hal itu (dan pada saat yang sama menjalankan Ping dan masuk untuk memeriksa apakah server masih hidup sama sekali):
printf '%s\n%s\n%s' "$time" "$dlay" "$code" if (( $errr != 0 )); then date >>/home/me/Progs/iNet/monitor/site.log date printf 'CURL Request failed. Error: %s\n' "$errr" >>/home/me/Progs/iNet/monitor/site.log printf 'CURL Request failed. Error: %s\n' "$errr" pung=$(ping -c 1 178.248.237.68) printf 'Ping: %s\n----\n' "$pung" >>/home/me/Progs/iNet/monitor/site.log printf 'Ping: %s\n' "$pung" fi
Ganti alamat IP dalam string ping dengan alamat IP asli situs Anda.
8. Kata Penutup
Hasil pekerjaan:

Di sebelah kiri pada panel Anda dapat melihat waktu dalam UTC dan respon situs saat ini. Di sebelah kanan adalah log: itu terlihat oleh reli, bahkan dengan bergulir sepintas, selama jam berapa beban lebih atau kurang. Anda juga dapat melihat respons lambat yang tidak normal (puncak; meskipun belum jelas dari mana asalnya).
Itu saja. Skripnya ternyata sederhana, ek, dan dapat ditingkatkan: bekerja pada pengoptimalan, portabilitas, peningkatan pemberitahuan dan tampilan, dengan mempertimbangkan proksi dan cache ...
Namun sudah dalam jenis program ini, mungkin dapat memberikan gambaran tentang kondisi situs Anda. Dan biarlah itu menjadi situs yang sesuai dengan bijak, berguna untuk orang dan semua makhluk!
Teks lengkap skrip dengan komentar. Jangan lupa untuk melakukan perubahan yang diperlukan! PS. Mengikuti diskusi (pada 02/12/2019):
Seperti yang saya harapkan, para ahli menulis banyak komentar menarik.
Setelah memikirkannya, saya dapat menjawab pertanyaan
rsashka , apa keuntungan dari skrip ini.
Alat-alat lain, seperti
NetData (terima kasih kepada
tchspprt untuk tipnya!),
Menyediakan sejumlah besar data yang tidak akan disimpan lama. NetData adalah alat yang baik ketika Anda bekerja setiap hari, mengelola situs web secara profesional. Baik untuk mendiagnosis masalah saat ini.
Script seperti milik saya adalah untuk mengawasi saat melakukan hal-hal lain. Script tidak memerlukan studi dan pengaturan khusus. Ini tidak buruk bagi orang awam. Dan log-nya mengambil ruang sangat sedikit sehingga mereka tidak bisa dihapus sama sekali. Mereka dapat terakumulasi selama bertahun-tahun, dan pada tahun N +1 Anda dapat melihat: "Wow, pada 2019, waktu respons saya satu setengah kali lebih rendah! .."
Artinya, solusi semacam itu memiliki ceruk tersendiri - terutama untuk administrator non-sistem yang terus-menerus. (Seperti yang dikatakan tchspprt : "Ini tentang cara memberi makan kucing tetangga saat liburan").andreymal menyarankan cara yang menarik untuk memperhitungkan dan kemudian melihat beban situs, tanpa dana tambahan, cukup melalui log akses di situs. Dan Anda dapat membangun grafik yang indah di atasnya. Saya mungkin akan mencoba opsi ini dan memposting di Github apa yang terjadi.unfforgiven menyarankan solusi lain yang menarik - mungkin solusi sederhana (instal prometheus, blackbox dan alermanager via docker composer). Pada VPS saya yang sederhana dan murah tidak cukup untuk memori ini; dan Linux dengan kernel lama - Docker tidak akan mulai. Tapi terima kasih untuk opsinya!Tip laintchspprt : Grafit + Prometheus + Grafana. Atau sediakan skrip dengan grafis yang indah (gnuplot atau rrdtool).Mcalexvrn merekomendasikan alat sederhana: uptimerobot . Terima kasih
Saya berterima kasih kepada semua orang atas sederetan informasi! Biarkan itu bermanfaat bagi orang ...