VPN хянагчийн логыг бичигчийг эвдэхгүйгээр эргүүлэх
Эхлээд хүлээн авагчийг сонгоод, дараа нь эргүүлэлтийг бичигч файлыг хэрхэн нээдэгтэй тохируулна: богино шалгалтад нэр солих, демон хөтөлбөрт дахин нээх эсвэл copytruncate.
VPN-ийн эрүүл мэндийн шалгалт минут тутамд нэг мөр нэмснээр чимээгүйхэн хоёр дахь үүрэг үүсгэдэг: тэдгээр мөрүүд дискнээс хэрхэн гарахыг шийдэх. Туннелийг засах нь энэ үүрэгт юу ч хийхгүй, файлын нэрийг солих нь хуучин тодорхойлолтыг барьсан процессыйг дахин чиглүүлэхгүй. Эхлээд хүлээн авагчийн асуултад хариулаад, дараа нь эргүүлэлтийг бичигч үүнийг хэрхэн нээдэгтэй тохируул.
Эргүүлэлтийн бодлогоос өмнө хүлээн авагчийг сонго
Гаралтаа аль хэдийн журнал руу илгээдэг systemd нэгж хадгалалтыг нэг газар барьдаг. journald SystemMaxUse ба MaxRetentionSec зэрэг хязгаарыг хэрэгжүүлдэг тул тэнд лог бичдэг хянагч нэмэлт ажилгүйгээр хязгаарыг өвлөдөг. Түүний хажууд хоёр дахь хязгааргүй файл нэмэх нь ашиггүйгээр үйлчилгээг хоёр дахин нэмэгдүүлнэ.
Тусгай файл өөрийн байр суурийг өөр зүйл түүнийг уншихад олдог: задлагч, аудитын экспорт эсвэл тогтвортой зам хүлээдэг хуудас. Энэ шийдвэр гарсны дараа файлд эзэмшигч, горим, эргүүлэлтийн бодлого хамт бичигдэх ёстой, учир нь гурвуулаа зөвхөн багц хэлбэрээр зөв байдаг. Хэн ч үүсгэж болох зам бол хэн ч сольж болох зам юм, тиймээс каталогийн эрх мөн адил тэмдэглэлд хамаарна. Энэ бүгдийг шалгалтын хажууд бичээрэй, дараагийн засвар мөн адил баримтаас эхэлнэ.
Блокыг бичигчид тохируулан бич
Дуудлага бүрт замыг нээж, нэг мөр нэмээд гардаг бичигчээр эхэл. Энэ загвар процессын ямар ч хамтын ажиллагаагүйгээр эргүүлэлтийг даван туулдаг, учир нь дараагийн ажиллагаа тухайн зам дээр одоо байгаа файлыг нээдэг. Доорх блок нэг долоо хоногийн хувилбарыг хадгалж, бичигчид хэрэгтэй эзэмшигч, горимтойгоор файлыг дахин үүсгэдэг:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
logrotate-ийн гарын авлага тоог хадгалсан эргүүлсэн хувилбарын тоо гэж тодорхойлдог бөгөөд долоон хоногийн түүхийн баталгаа гэж биш, мөн daily түлхүүр үг өөрийн хуваарилагч мэт ажиллахын оронд ажил ажиллах үед үнэлэгддэг. Ихэнх хуваарилалтад systemd таймер эсвэл cron бичлэг аль хэдийн энэ дуудлагыг эзэмшдэг тул хоёр дахь нэмэхийн өмнө аль нь байгааг шалга. Эзэмшлийг тааруулах нь хадгалалтын тооноос илүү чухал. Зөвхөн root-д зориулсан горимыг үйлчилгээний бүртгэл бичдэг файл дээр хуулах нь дараагийн эргүүлэлтэд лог бичихийг зогсоож, алдаа нь цаг хөн дараа алдаа биш хуучирсан цагын тэмдэг хэлбэрээр илэрдэг. Блокыг өөр газраас хуулахын өмнө бичигчийн хэрэглэгчийг баталгаажуул.
Хэзээ ч дахин нээдэггүй бичигчид өөр засвар хэрэгтэй
Нээлттэй тодорхойлолт барьсан урт хугацааны процесс нэр солигдсон inode руу бичсээр байна. Зай чөлөөлөгдөхгүй, харагдах файл өсөхөө болих бөгөөд inode-ыг шалгах хүртэл энэ нь эвдэрсэн эргүүлэлт мэт харагдана. Эсвэл процессд дахин нээхийг заа, эсвэл эргүүлэлтийг нэр солихын оронд хуулж тасла.
Дахин нээх зам програм хангамж дэмждэг газарт илүү цэвэр: баримтжуулсан дохиог илгээ эсвэл баримтжуулсан командыг ажиллуул, процесс шинэ файлыг өөрөө нээг. Өөр хувилбар нь copytruncate бөгөөд агуулгыг эргүүлсэн нэр рүү хуулж, дараа нь эх хувийг байранд нь тасладаг тул тодорхойлолт хүчинтэй хэвээр байх боловч хуулах ба таслахын хооронд орсон бичлэг алдагдана.
systemd-ээр эхлүүлсэн нэгжүүдийн хувьд StandardOutput-ийг журнал эсвэл файл руу чиглүүлж, амьдралын мөчлөгийг нэгжид үлдээ. Хэмжээний хязгааргүйгээр tee -a-ээр нэмдэг shell цикл нь гэмтлийн үед хуваалтыг дүүргэдэг зохион байгуулалт, учир нь бүтэлгүйтсэн шалгалт эрүүл шалгалтаас хамаагүй их лог бичдэг.
Таймерыг хүлээхгүйгээр эргүүлэлтийг турш
Дибаг горим юу болохыг мэдээлж, юунд ч хүрэхгүй тул засварын дараах аюулгүй эхний ажиллагаа болдог. Сэтгэл хангалуун болсны дараа бодит эргүүлэлтийг албадаж, дараа нь дараагийн лог мөр нэр солигдсон файл руу биш, шинэ файл руу ордог гэдгийг баталгаажуул:
logrotate -d /etc/logrotate.d/vpn-watchdog logrotate -f /etc/logrotate.d/vpn-watchdog ls -l /var/log/vpn-watchdog.log* tail -n 3 /var/log/vpn-watchdog.log df -h /var/log
Гаралтыг тэр дарааллаар унш. Дибагийн явц файл болон төлөвлөсөн үйлдлүүдийг нэрлэх ёстой; албадсан ажиллагаа хүлээгдэж буй эргүүлсэн нэрийг үүсгэх ёстой; tail бичигч дахин ажилласны дараа шинэ бичлэг харуулах ёстой. Өсөж буй df утга ба багасаж буй харагдах файл нь дээр дурдсан тодорхойлолтын асуудлыг илэрхийлнэ.
Хувилбарууд аль хэдийн байгаа үед хадгалалт хэрхэн ажиллахыг харахын тулд албадсан ажиллагааг хоёр удаа давта. Хамгийн хуучин файлыг устгах нь хүлээгдэж буй үр дүн бөгөөд устгал байхгүй байх нь ихэвчлэн эргүүлсэн нэр дэх тоо эсвэл орлуулагч тэмдэгт logrotate-ийн үүсгэсэнтэй тохирохгүй байгааг илтгэнэ.
Буцаах боломж, бичмэл бүртгэл хадгал
Засварын өмнө өмнөх блокыг хадгалж, аль хуваарилагч үүнийг ажиллуулдагийг тэмдэглэ, учир нь файлыг буцааж, таймерыг буцаадаггүй буцаалт нь анхны асуудлын талыг дахин гаргадаг. Сэргээсний дараа нэг удаа гараар эргүүлж, дараа нь бичигчийн бүртгэл лог замаар бичиж чадахыг баталгаажуул. Үйлчилгээ systemd-ийн дор ажилладаг бол түүний гаралтын дахин чиглүүлэлтийн аливаа өөрчлөлтийн дараа нэгжийг дахин ачаал, учир нь ажиллаж буй процесс хуучин зорилт руу бичсээр байдаг. Нэгж цэвэр буцаж ирсэн гэдэгт итгэхийн оронд дараагийн хэдэн лог мөрийг өөрөө унш.
Горим, эзэмшигч, хадгалалтын тоо, хүлээгдэж буй дискний төсвийг шалгалтын яг хажууд бич. Хожим шалгалт нэг удаагийн скриптээс демон болох үед эргүүлэлтийн бодлого түүнтэй хамт өөрчлөгдөх ёстой бөгөөд тэр тэмдэглэл нь дараагийн хүнд аль таамаглал эвдэрснийг хэлнэ.
Эцэст нь логын шийдвэрийг сэргээлтийн шийдвэрээс тусгаарла. Бүтэлгүйтсэн шалгалт холболтын өөрийн сэргээлтийн бодлогыг дагах ёстой, logrotate дотор нуугдсан дүрмийг биш, мөн ямар ч лог зохион байгуулалт ажиллаж буй туннелийг дахин эхлүүлэх шалтгаан болох ёсгүй.