Halo, Habr!
Saat ini saya sedang mengerjakan proyek messenger blockchain dengan tim kolega saya. Siapa yang peduli - lihat tautan di profil atau tanyakan di komentar.
Pengembangan Blockchain adalah bidang baru dan tidak dikenal, jadi terkadang Anda harus menggunakan alat yang sangat tidak standar. Di mana mikroskop dan paku! Karena itu, saya memutuskan untuk menjaga blog ini agar dapat menceritakan berbagai kasus menarik dari praktik. Posting hari ini adalah tentang bagaimana saya mengatur pemberitahuan instan tentang keadaan simpul saya, dalam hal ini saya dapat dengan cepat menghidupkannya kembali.

Rencana yang saya ikuti
Tugas yang saya tetapkan sendiri adalah ini: setiap kali sebuah simpul crash atau berhenti bekerja, saya harus menerima pemberitahuan instan tentangnya. Tetapi kita hidup di zaman progresif dan terbiasa menerima semua informasi penting secara instan, bukan?
Saya memutuskan bahwa untuk menyelesaikan tugas ini saya akan mempercepat Zabbix ke Slack (kami memiliki alat proyek yang berfungsi). Zabbix, karenanya, akan memonitor node dan mengirim pesan kesalahan kepada saya di PM Slack.
Implementasi: Langkah demi Langkah
Langkah 1: Zabbix
Tentu saja, Zabbix tidak memiliki alat pemantauan pra-konfigurasi standar untuk simpul kami. Oleh karena itu, keinginan pertama adalah untuk menentukan ketersediaan port node menggunakan kunci
net.tcp.listen[port].
Tetapi ada satu "tetapi": itu terjadi bahwa node aktif, ia mendengarkan pada port, tetapi tidak berfungsi dengan benar. Dan di sini saya dihadapkan dengan fakta bahwa Anda perlu menentukan tanda utama kinerja sebuah node.
Apa yang harus Noda lakukan? Benar, tumbuh. Di sini pertumbuhan akan menjadi tanda utama. Oleh karena itu, saya memutuskan untuk menggunakan key
system.run[command, mode]
.
Bersama dengan
curl -s http://127.0.0.1:36666/api/blocks/getHeight
.
Sebagai hasilnya, kami menerima string format JSON dari formulir
{"success":true,"nodeTimestamp":XXXXXXX,"height":XXXXXXX}
Paket jq (https://stedolan.imtqy.com/jq/) datang membantu dalam memecahkan masalah penguraian JSON. Transfer hasil sederhana melalui pipa
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
{6666 / api / blocks / getHeight
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height
, dan alih-alih ketinggian yang ditunggu-tunggu, kami menerima respons yang berisi informasi tentang perintah
curl
.

Informasi yang berlebihan perlu dihapus, dan kemudian seorang asisten datang -
-s
, alias
-silent
. Akibatnya, menggunakan Zabbix key
system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height]
system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height]
kita mendapatkan ketinggian simpul yang diinginkan dan nyaman untuk memantau tampilan XXXXXXXXX.

Pemicu juga diperlukan untuk mengonfigurasi peringatan yang direncanakan. Rencananya adalah ini: bandingkan nilai-nilai terakhir dan sebelumnya, dan sehingga pemicu berfungsi jika pertumbuhannya kurang dari satu.
{ADAMANT Node Monitoring:system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height].change()}<1
Langkah 2. Zabbix ke Slack

Tugas selanjutnya adalah memberi tahu pemicu di Slack. Sebagai dasar, saya mengambil materi
https://github.com/ericoc/zabbix-slack-alertscript .
Petunjuknya jelas, tetapi menggunakan emotikon untuk membedakan antara Tingkat Permasalahan tidak serius. Penyorotan warna jauh lebih menarik. Setelah memproses skrip, ini tetap:
url='********************************' username='Server' to="$1" subject="$2" recoversub='^RECOVER(Y|ED)?$' if [[ "$subject" == 'Warning' ]]; then color='#EBFF00' elif [ "$subject" == 'Not classified' ]; then color='#D8E3FF' elif [ "$subject" == 'Information' ]; then color='#0049FF' elif [ "$subject" == 'Average' ]; then color='#FFC200' elif [ "$subject" == 'High' ]; then color='#FF5500' elif [ "$subject" == 'Disaster' ]; then color='#FF0000' else color='#00FF06' fi message="${subject} \n $3" payload="payload={\"attachments\": [{\"color\": \"${color}\", \"text\": \"${message}\"}]}" curl -m 5 --data-urlencode "${payload}" $url
Kesimpulan
Sebagai moral, beberapa kata, mengapa pemantauan yang mudah sangat penting. Semakin cepat Anda belajar tentang situasinya, semakin cepat Anda akan memperbaikinya dan konsekuensinya akan semakin jelas. Seperti yang mereka katakan, waktu yang dihabiskan tidak dianggap telah jatuh. Dan di Slack, antara lain, ada obrolan grup, sehingga tim dapat terhubung untuk memperbaiki masalah dan mengoordinasikan tindakan. Omong-omong, proyek kami memiliki kode sumber terbuka, dan kami sangat menghormati proyek-proyek sumber terbuka lainnya. Percobaan saya sekali lagi menunjukkan bahwa open source itu bagus.