Selama proses operasi dan pemeliharaan server, seringkali perlu untuk memantau berbagai sumber daya server, seperti: pemantauan beban CPU, pemantauan penggunaan disk, pemantauan nomor proses, dll., Sehingga segera khawatir ketika kelainan terjadi dalam sistem dan memberi tahu administrator sistem. Artikel ini memperkenalkan beberapa persyaratan pemantauan umum dan penulisan skrip shell dalam sistem Linux.
Direktori Artikel:
1.linux menggunakan shell untuk memeriksa apakah prosesnya ada
2. Linux menggunakan shell untuk mendeteksi proses pemanfaatan CPU
3. Linux menggunakan shell untuk mendeteksi penggunaan memori proses
4. Linux menggunakan shell untuk mendeteksi proses pegangan proses
5.Linux menggunakan shell untuk melihat apakah port TCP atau UDP mendengarkan
6.Linux menggunakan shell untuk melihat jumlah proses berjalan
7. Linux menggunakan shell untuk mendeteksi beban CPU sistem
8. Linux menggunakan shell untuk mendeteksi ruang disk sistem
9. Ringkasan
Periksa apakah prosesnya ada
Saat memantau suatu proses, kita umumnya perlu mendapatkan ID proses. ID proses adalah pengidentifikasi unik dari proses, tetapi kadang -kadang banyak proses dengan nama proses yang sama dapat dijalankan di bawah pengguna yang berbeda di server. Fungsi getPid di bawah ini memberikan fungsi untuk mendapatkan ID proses dari nama proses yang ditentukan di bawah pengguna yang ditentukan (saat ini, hanya mempertimbangkan memulai proses dengan nama proses ini di bawah pengguna ini). Ini memiliki dua parameter: nama pengguna dan nama proses. Pertama -tama menggunakan PS untuk menemukan informasi proses, dan menyaring proses yang diperlukan melalui GREP, dan akhirnya menemukan nilai ID dari proses melalui SED dan AWK (fungsi ini dapat dimodifikasi sesuai dengan kondisi aktual, seperti menyaring informasi lain, dll.).
Daftar 1. Memantau proses
Salinan kode adalah sebagai berikut:
fungsi getPid #user #name
{
Psuser = $ 1
Psname = $ 2
pid = `ps -u $ psuser | grep $ psname | grep -v grep | grep -v vi | grep -v dbx/n
| grep -v ekor | grep -v mulai | grep -v berhenti | sed -n 1p | awk '{cetak $ 1}' `
Echo $ pid
}
Contoh Demonstrasi:
1) program sumber (misalnya, temukan ID proses pengguna sebagai root dan nama prosesnya cftestapp)
Salinan kode adalah sebagai berikut:
Pid = `getPid root cftestapp`
Echo $ pid
2) hasil hasil
Salinan kode adalah sebagai berikut:
11426
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Dari output di atas, kita dapat melihat bahwa 11426 adalah ID proses dari program CFTestApp di bawah pengguna root.
4) Pendahuluan Perintah
1. PS: Lihat informasi proses instan dalam sistem. Parameter: -U <Kode Identifikasi Pengguna> daftar status program milik pengguna, dan juga dapat ditentukan menggunakan nama pengguna. -P <Kode Identifikasi Proses> Tentukan kode identifikasi proses dan daftarkan status proses. -O Tentukan format output 2. GREP: Digunakan untuk menemukan baris saat ini dalam file yang cocok dengan string. Parameter: -V Seleksi terbalik, yaitu, baris yang tidak menunjukkan konten 'pencarian string'. 3. SED: Editor teks non-interaktif yang mengedit file atau mengekspor file dari input standar, dan hanya dapat memproses satu baris konten sekaligus. Parameter: -n Baca baris input berikutnya dan gunakan perintah berikutnya untuk memproses baris baru alih -alih perintah pertama. B FLAG PRINT Pencocokan Baris 4. AWK: Bahasa pemrograman untuk memproses teks dan data di bawah Linux/UNIX. Data dapat dari input standar, satu atau lebih file, atau output dari perintah lain. Ini mendukung fungsi canggih seperti fungsi yang ditentukan pengguna dan ekspresi reguler yang dinamis, dan merupakan alat pemrograman yang kuat di bawah Linux/UNIX. Ini digunakan di baris perintah, tetapi lebih sebagai skrip. Cara AWK Memproses Teks dan Data: Ini memindai file langkah demi langkah, dari baris pertama ke baris terakhir, mencari baris yang cocok dengan pola spesifik, dan melakukan apa yang Anda inginkan pada baris itu. Jika tidak ada tindakan pemrosesan yang ditentukan, baris yang cocok ditampilkan ke output standar (layar). Jika tidak ada mode yang ditentukan, semua baris yang ditentukan oleh operasi diproses. Parameter: -F FS atau pemisahan bidang FS: Menentukan pembatas file input, FS adalah string atau ekspresi reguler, seperti -f:.
Terkadang mungkin prosesnya belum dimulai. Fungsi berikut adalah untuk memeriksa apakah ID proses ada. Jika proses ini tidak menjalankan output:
Salinan kode adalah sebagai berikut:
Prosesnya tidak ada.
# Periksa apakah prosesnya ada
if ["-$ pid" == "-"]
Kemudian
{
menggemakan "prosesnya tidak ada."
}
fi
Deteksi proses pemanfaatan CPU
Saat mempertahankan layanan aplikasi, kami sering mengalami penyumbatan bisnis karena CPU yang berlebihan, yang mengakibatkan gangguan bisnis. Jika CPU terlalu tinggi, itu mungkin karena beban bisnis yang berlebihan atau siklus abnormal seperti siklus mati. CPU dari proses bisnis dipantau tepat waktu melalui skrip, dan personel pemeliharaan dapat diberitahu secara tepat waktu ketika pemanfaatan CPU tidak normal, sehingga personel pemeliharaan dapat segera dianalisis, diposisikan, dan menghindari gangguan bisnis. Fungsi berikut dapat memperoleh proses pemanfaatan CPU dari ID proses yang ditentukan. Ini memiliki parameter sebagai ID proses. Pertama menggunakan PS untuk menemukan informasi proses, menyaring %baris CPU melalui Grep -V, dan akhirnya menemukan bagian integer dari persentase pemanfaatan CPU melalui AWK (jika ada beberapa CPU dalam sistem, pemanfaatan CPU dapat melebihi 100 %).
Listing 2. Pemantauan waktu nyata dari proses bisnis CPU
Salinan kode adalah sebagai berikut:
fungsi getCPU
{
Cpuvalue = `ps -p $ 1 -o pcpu | grep -v cpu | awk '{cetak $ 1}' | AWK - F. '{print $ 1}' `
Echo $ cpuvalue
}
Fungsi berikut adalah untuk mendapatkan pemanfaatan CPU dari proses ini melalui fungsi di atas getCPU, dan kemudian menggunakan pernyataan bersyarat untuk menentukan apakah pemanfaatan CPU melebihi batas. Jika melebihi 80% (dapat disesuaikan sesuai dengan situasi aktual), alarm akan output, jika tidak, informasi normal akan menjadi output.
Listing 3. Tentukan apakah pemanfaatan CPU melebihi batas
Salinan kode adalah sebagai berikut:
FUNGSI CHECKCPU
{
PID = $ 1
cpu = `getCpu $ pid`
Jika [$ CPU -GT 80]
Kemudian
{
echo "Penggunaan CPU lebih besar dari 80%"
}
kalau tidak
{
Echo "Penggunaan CPU adalah normal"
}
fi
}
Contoh Demonstrasi:
1) Program Sumber (dengan asumsi bahwa ID proses CFTestApp telah ditanyakan di atas adalah 11426)
Salinan kode adalah sebagai berikut:
CheckCPU 11426
2) hasil hasil
Salinan kode adalah sebagai berikut:
Penggunaan CPU adalah 75
Penggunaan CPU normal
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Seperti yang dapat dilihat dari output di atas: penggunaan CPU saat ini dari program CFTestApp adalah 75%, yang normal, dan tidak ada batas alarm lebih dari 80%.
Mendeteksi Penggunaan Memori Proses
Saat mempertahankan layanan aplikasi, sering kali ditemui bahwa proses macet karena penggunaan memori yang berlebihan, yang mengakibatkan gangguan bisnis (misalnya, ruang memori maksimum yang dapat diatasi oleh program 32-bit adalah 4G, jika melebihi memori, memori akan gagal, dan memori fisik juga terbatas). Penggunaan memori yang berlebihan mungkin karena kebocoran memori, akumulasi pesan, dll. Penggunaan memori dari proses bisnis dapat dipantau secara tepat waktu melalui skrip, dan alarm dapat dikirim tepat waktu ketika penggunaan memori tidak normal (seperti melalui SMS) untuk memfasilitasi personel pemeliharaan untuk menanganinya tepat waktu. Fungsi berikut dapat memperoleh penggunaan memori proses dari ID proses yang ditentukan. Ini memiliki parameter sebagai ID proses, yang pertama kali menggunakan PS untuk menemukan informasi proses, menyaring jalur VSZ melalui grep -V, dan kemudian mengambil penggunaan memori dalam megabyte dengan membagi 1000.
Daftar 4. Pemantauan Penggunaan Memori Proses Bisnis
Salinan kode adalah sebagai berikut:
fungsi getMem
{
Memusage = `ps -o vsz -p $ 1 | grep -v vsz`
((Memusage /= 1000))
Echo $ Memusage
}
Fungsi berikut adalah untuk mendapatkan penggunaan memori dari proses ini melalui fungsi di atas getMem, dan kemudian menggunakan pernyataan bersyarat untuk menentukan apakah penggunaan memori melebihi batas. Jika melebihi 1.6g (dapat disesuaikan sesuai dengan situasi aktual), alarm akan output, jika tidak informasi normal akan menjadi output.
Listing 5. Tentukan apakah penggunaan memori melebihi batas
Salinan kode adalah sebagai berikut:
mem = `getMem $ pid`
Jika [$ mem -gt 1600]
Kemudian
{
echo "penggunaan memori lebih besar dari 1,6g"
}
kalau tidak
{
echo "penggunaan memori itu normal"
}
fi
Contoh Demonstrasi:
1) Program Sumber (dengan asumsi bahwa ID proses CFTestApp telah ditanyakan di atas adalah 11426)
Salinan kode adalah sebagai berikut:
mem = `getMem 11426`
echo "Penggunaan memori adalah $ memm"
Jika [$ mem -gt 1600]
Kemudian
{
echo "Penggunaan memori lebih besar dari 1,6g"
}
kalau tidak
{
echo "Penggunaan memori itu normal"
}
fi
2) hasil hasil
Salinan kode adalah sebagai berikut:
Penggunaan ingatan adalah 248 m
Penggunaan memori itu normal
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Dari output di atas, kita dapat melihat bahwa penggunaan memori saat ini dari program CFTestApp adalah 248m, yang normal dan tidak ada batas alarm melebihi 1.6G.
Mendeteksi Proses Pegangan Penggunaan
Saat mempertahankan layanan aplikasi, gangguan bisnis sering ditemui karena penggunaan pegangan yang berlebihan. Setiap platform menggunakan pegangan proses dengan penggunaan terbatas. Misalnya, pada platform Linux, kita dapat menggunakan perintah ULIMIT N (Open Files (-N) 1024) atau melihat konten /etc/security/limits.conf untuk mendapatkan pembatasan pegangan proses. Jika pegangan digunakan terlalu tinggi, kebocoran pegangan mungkin disebabkan oleh beban yang berlebihan, kebocoran pegangan, dll. Proses bisnis Penggunaan pegangan dipantau secara tepat waktu melalui skrip, dan alarm dapat dikirim secara tepat waktu jika terjadi kelainan waktu (seperti melalui SMS) untuk memfasilitasi personel pemeliharaan untuk menangani dengan cara yang tepat waktu. Fungsi berikut dapat memperoleh penggunaan Proses Penggunaan ID Proses yang ditentukan. Ini memiliki parameter sebagai ID proses. Pertama -tama menggunakan LS untuk menghasilkan informasi menangani proses, dan kemudian menghitung jumlah pegangan output melalui WC -L.
Salinan kode adalah sebagai berikut:
fungsi getdes
{
Des = `ls/proc/$ 1/fd | wc -l`
Echo $ des
}
Fungsi berikut adalah untuk mendapatkan penggunaan pegangan dari proses ini melalui fungsi di atas getdes, dan kemudian menggunakan pernyataan bersyarat untuk menentukan apakah penggunaan pegangan melebihi batasnya. Jika melebihi 900 (dapat disesuaikan sesuai dengan situasi aktual), alarm akan menjadi output, jika tidak informasi normal akan menjadi output.
Salinan kode adalah sebagai berikut:
des = `getdes $ pid`
Jika [$ des -gt 900]
Kemudian
{
echo "jumlah DES lebih besar dari 900"
}
kalau tidak
{
echo "jumlah DES normal"
}
fi
Contoh Demonstrasi:
1) Program Sumber (dengan asumsi bahwa ID proses CFTestApp ditemukan di atas adalah 11426)
Salinan kode adalah sebagai berikut:
des = `getdes 11426`
echo "jumlah des adalah $ des"
Jika [$ des -gt 900]
Kemudian
{
echo "Jumlah DES lebih besar dari 900"
}
kalau tidak
{
echo "jumlah DES normal"
}
fi
2) hasil hasil
Salinan kode adalah sebagai berikut:
Jumlah DES adalah 528
Jumlah DES normal
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Dari output di atas, kita dapat melihat bahwa pegangan saat ini dari program CFTestApp adalah 528, yang normal, dan tidak ada batas alarm lebih dari 900.
4) Pendahuluan Perintah
WC: Statistik Jumlah byte, kata, dan baris dalam file yang ditentukan, dan menampilkan hasil statistik ke output. Parameter: -l Hitung jumlah baris. -C Hitung jumlah byte. -W hitung jumlah kata.
Periksa apakah port TCP atau UDP mendengarkan
Deteksi port sering ditemui dalam deteksi sumber daya sistem, terutama dalam komunikasi jaringan, deteksi status port seringkali sangat penting. Kadang -kadang proses, CPU, memori, dll. Mungkin dalam keadaan normal, tetapi pelabuhan dalam keadaan abnormal, dan bisnis tidak berjalan secara normal. Fungsi berikut dapat menentukan apakah port yang ditentukan mendengarkan. Ini memiliki parameter yang merupakan port yang akan terdeteksi. Pertama -tama menggunakan NetStat untuk mengeluarkan informasi pekerjaan port, dan kemudian menyaring jumlah output port TCP melalui Grep, AWK, WC. Pernyataan kedua adalah menampilkan jumlah monitor port UDP. Jika port TCP dan UDP adalah 0, kembalikan 0, jika tidak, kembalikan 1.
Daftar 6. Deteksi Pelabuhan
Salinan kode adalah sebagai berikut:
Fungsi Mendengarkan
{
TcPlistennum = `netstat -an | grep ": $ 1" | /N
awk '$ 1 == "tcp" && $ nf == "dengarkan" {print $ 0}' | wc -l`
Udplisteningnum = `netstat -an | grep": $ 1 " /n
| AWK '$ 1 == "UDP" && $ nf == "0.0.0.0:*" {print $ 0}' | wc -l`
((ListeningNum = tcplisteningnum + udplisteningnum)))
Jika [$ listeningNum == 0]
Kemudian
{
Echo "0"
}
kalau tidak
{
Echo "1"
}
fi
}
Contoh Demonstrasi:
1) program sumber (misalnya, permintaan apakah status port 8080 mendengarkan)
Salinan kode adalah sebagai berikut:
isListen = `Mendengarkan 8080`
Jika [$ isListen -eq 1]
Kemudian
{
echo "port mendengarkan"
}
kalau tidak
{
echo "port tidak mendengarkan"
}
fi
2) hasil hasil
Salinan kode adalah sebagai berikut:
Port mendengarkan
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Dari output di atas, dapat dilihat bahwa port 8080 dari server Linux ini dalam keadaan mendengarkan.
4) Pendahuluan Perintah
NetStat: Digunakan untuk menampilkan data statistik yang terkait dengan protokol IP, TCP, UDP dan ICMP, dan umumnya digunakan untuk memverifikasi status koneksi jaringan setiap port mesin. Parameter: -A menampilkan soket di semua koneksi. -n Gunakan alamat IP secara langsung, bukan melalui server nama domain.
Fungsi berikut juga untuk mendeteksi apakah port TCP atau UDP dalam keadaan normal.
Salinan kode adalah sebagai berikut:
TCP: netstat -an | egrep $ 1 | awk '$ 6 == "dengarkan" && $ 1 == "tcp" {print $ 0}'
UDP: netstat -an | egrep $ 1 | awk '$ 1 == "udp" && $ 5 == "0.0.0.0:*" {print $ 0}'
Pendahuluan Perintah
Egrep: Temukan string yang ditentukan dalam file. Efek eksekusi egrep seperti grep -e. Sintaks dan parameter yang digunakan dapat dirujuk ke instruksi GREP. Perbedaan dari GREP adalah metode menafsirkan string. Egrep ditafsirkan menggunakan sintaks ekspresi reguler yang diperluas, sedangkan GREP menggunakan sintaks ekspresi reguler dasar. Ekspresi reguler yang diperluas memiliki spesifikasi ekspresi yang lebih lengkap daripada ekspresi reguler dasar.
Periksa jumlah proses berjalan
Terkadang kita mungkin perlu mendapatkan jumlah awal proses di server. Fungsi berikut adalah untuk mendeteksi jumlah proses yang berjalan, seperti nama prosesnya adalah CFTestApp.
Salinan kode adalah sebagai berikut:
Runnum = `ps -ef | grep -v vi | grep -v ekor | grep "[ /] cftestapp" | grep -v grep | WC -L
Deteksi Sistem Beban CPU
Saat mempertahankan server, kadang -kadang gangguan bisnis ditemui karena beban Sistem CPU (pemanfaatan) yang berlebihan. Dimungkinkan untuk menjalankan beberapa proses di server. Adalah normal untuk melihat CPU dari satu proses, tetapi beban CPU dari seluruh sistem mungkin abnormal. Sistem beban CPU dipantau secara tepat waktu melalui skrip, dan alarm dapat dikirim tepat waktu jika terjadi kelainan, yang memfasilitasi personel pemeliharaan untuk menghadapinya secara tepat waktu dan mencegah kecelakaan. Fungsi berikut dapat mendeteksi penggunaan sistem CPU. Gunakan VMSTAT untuk mengambil nilai idle dari sistem CPU 5 kali, ambil nilai rata -rata, dan kemudian dapatkan nilai hunian aktual dari CPU saat ini dengan mengambil perbedaan dari 100.
Salinan kode adalah sebagai berikut:
fungsi getsyscpu
{
Cpuidle = `vmstat 1 5 | sed -n '3, $ p' /n
| awk '{x = x + $ 15} end {print x/5}' | awk -f. '{cetak $ 1}'
Cpunum = `echo" 100- $ cpuidle "| bc`
Echo $ cpunum
}
Contoh Demonstrasi:
1) Program Sumber
Salinan kode adalah sebagai berikut:
cpu = `getsyscpu`
echo "Sistem CPU adalah $ CPU"
Jika [$ CPU -GT 90]
Kemudian
{
echo "Penggunaan Sistem CPU lebih besar dari 90%"
}
kalau tidak
{
echo "Penggunaan sistem CPU adalah normal"
}
fi
2) hasil hasil
Salinan kode adalah sebagai berikut:
Sistem CPU adalah 87
Penggunaan Sistem CPU normal
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Dari output di atas, kita dapat melihat bahwa tingkat pemanfaatan CPU saat ini dari sistem server Linux adalah 87%, yang normal, dan tidak ada batas alarm lebih dari 90%.
4) Pendahuluan Perintah
VMSTAT: Singkatan dari statistik meomory virtual, yang dapat memantau memori virtual, proses, dan kegiatan CPU sistem operasi.
Parameter: -n berarti bahwa ketika informasi header yang dikeluarkan ditampilkan hanya sekali selama output siklik periodik.
Mendeteksi ruang disk sistem
Deteksi ruang disk sistem adalah bagian penting dari deteksi sumber daya sistem. Selama pemeliharaan sistem, kita sering perlu memeriksa penggunaan ruang disk server. Karena beberapa bisnis perlu menulis lembar panggilan, log, atau file sementara kapan saja, jika ruang disk habis, itu juga dapat menyebabkan gangguan bisnis. Fungsi berikut dapat mendeteksi penggunaan ruang disk dari direktori dalam ruang disk sistem saat ini. Parameter input adalah nama direktori yang perlu dideteksi, menggunakan DF untuk mengeluarkan informasi penggunaan ruang penggunaan ruang, dan kemudian mendapatkan persentase penggunaan ruang disk dari direktori melalui grep dan penyaringan AWK.
Salinan kode adalah sebagai berikut:
fungsi getDiskspc
{
Jika [$# -ne 1]
Kemudian
kembali 1
fi
Folder = "$ 1 $"
DISKSPACE = `df -k | grep $ folder | awk '{cetak $ 5}' | awk -f% '{cetak $ 1}'
Echo $ Diskspace
}
Contoh Demonstrasi:
1) Program Sumber (Direktori Deteksi IS /Boot)
Salinan kode adalah sebagai berikut:
Folder = "/boot"
DiskSpace = `getDiskspc $ folder`
echo "Sistem $ Folder Disk Space adalah $ Diskspace%"
Jika [$ DISKSPACE -GT 90]
Kemudian
{
echo "Penggunaan disk sistem ($ folder) lebih besar dari 90%"
}
kalau tidak
{
echo "Penggunaan disk sistem ($ folder) adalah normal"
}
fi
2) hasil hasil
Salinan kode adalah sebagai berikut:
Ruang Disk Sistem /Boot adalah 14%
Penggunaan disk sistem (/boot) normal
[dyu@xilinuxbldsrv shell] $
3) Analisis Hasil
Seperti yang dapat dilihat dari output di atas: Saat ini, ruang disk dari direktori /boot pada sistem server Linux ini telah digunakan sebesar 14%, yang normal, dan tidak ada batas alarm lebih dari 90% penggunaan.
4) Pendahuluan Perintah
DF: Periksa penggunaan ruang disk dari sistem file. Perintah ini dapat digunakan untuk mendapatkan informasi seperti berapa banyak ruang yang telah ditempati hard disk dan berapa banyak ruang yang tersisa. Parameter: -K ditampilkan dalam k byte.
Meringkaskan
Di bawah platform Linux, pemantauan skrip shell adalah metode yang sangat sederhana, nyaman dan efektif untuk memantau server dan proses, yang sangat membantu untuk pengembangan sistem dan memproses personel pemeliharaan. Ini tidak hanya dapat memantau informasi di atas dan mengirim alarm, tetapi juga memantau log proses dan informasi lainnya. Saya harap artikel ini akan membantu semua orang.