Ops-avtomatlashtirish va skriptlar
1) Nima uchun operatsiyalarni avtomatlashtirish
MTTR/inson xatolarini kamaytiradi, relizlar va reaktsiyalarni tezlashtiradi.
Harakatlarni takrorlanadigan va auditlanadigan qiladi (komplayens).
Muhandislar uchun kundalik ish emas, balki yaxshilanish uchun vaqt ajratadi.
2) Asosiy prinsiplar
1. Idempotentlik: qayta ishga tushirish → bir xil natija.
2. Xavfsiz panjara: dry-run, tasdiqlash, limitlar, avto-qaytish.
3. Kuzatish darajasi: loglar/metriklar/treyslar har bir skript/payplaynga oʻrnatilgan.
4. Kod tarkibidagi> konstantalar: hamma parametrlar/manifestlar orqali.
5. GitOps/Docs-as-Code: operatsiya kodi versiyalashtiriladi, revyuerlanadi, sinovdan oʻtkaziladi.
6. Kichik qadamlar: kanareya ulushlari, batchi, byudjet retraylari.
7. Repoda sirlarsiz: faqat secret-saqlash xonalari orqali.
3) Avtomatlashtirish vazifalari klasslari
Remediatsiya va hodisalar: orqaga qaytish, provayderlarni o’zgartirish, tanazzulning fich-bayroqlari.
Rejali ishlar: sertifikatlar/kalitlarni almashtirish, DB migratsiyasi (expand → migrate → contract).
Infratuzilmani boshqarish: IaC (Terraform), konfiguratsiyalar (Ansible), K8s manifestlar.
Maʼlumotlar va DataOps: backfill, ETL, sifat validatsiyasi.
Xaoc/DR mashqlari: Xavfsizlik darvozalari bilan nosozliklarni simulyatsiya qilish.
4) Asbobni qanday tanlash kerak
Bash - qisqa glue skriptlar, CLI orkestratsiyasi.
Python - mantiq/SDK, retralar, API, JSON/YAML bilan ishlash.
Ansible - idempotent konfiguratsiyasi, agentlar kerak emas.
Terraform - deklarativ infratuzilma.
Kubernetes Jobs/CronJobs - paketli vazifalar/rejalashtirish.
Argo/Airflow - bog’liq DAG-i va orkestr.
ChatOps - audit bilan chatdan xavfsiz ishga tushirish.
5) Avtomatika arxitekturasi (referens)
CLI/ChatOps → Nazoratchi (GitOps/orkestrator) → Ijrochilar (Ansible/Terraform/K8s Job) → Monitoring (loglar/metriklar/treyslar) → Audit/tiketing → Doc-artefaktlar (evidence).
6) Idempotentlik va holatni boshqarish
«Tekshiring, keyin o’zgartiring»: detect-then-act (agar allaqachon OK bo’lsa - hech narsa qilmang).
Uzoq protseduralar uchun «bajarish belgilari» (state/lock) ni saqlang.
Protseduralarni atom qadamlariga bo’ling.
7) Xatolar, retralar va orqaga qaytishlar
Eksponensial kechikish va jitter bilan retralar.
Operatsiya vaqtining byudjeti (vazifa uchun umumiy SLA).
Orqaga qaytish va to’xtash tugmasi (circuit breaker) har doim ko’zda tutilgan.
Aniq qaytarish kodlari va tuzilgan xatolar.
8) Xavfsizlik va sirlar
RBAC/ABAC, minimal imtiyozlar, vaqtinchalik tokenlar (JIT/JEA).
Vault/KMS/Cloud Secret Manager dan sirlar; kalitlar rotatsiya qilinadi.
«Vazifalarni ajratish»: kim yozsa, uni maʼqullaydigan va uni ishlab chiqaradigan odam emas.
Audit-jurnal: kim/qachon/nima/qanday natija bilan.
9) GitOps и ChatOps
PR → testlar → revyu → merj → avto-promosyon.
Chat buyruqlari (masalan, ’/ops deploy checkout --canary 5%’) payplaynlarni chaqiradi; botlar evidence va dashbordlarga havolalarni qo’llaydi.
10) Rejalashtirish va orkestrlash
CronJobs/DAG bogʻliqlik va muddatlar bilan.
Raqobatbardoshlik: vazifasiga qarab’Forbid’,’Replace’,’Allow’(K8s).
Resurslar/kvotalar siyosati.
11) Avtomatika kuzatilishi
Metrika: muvaffaqiyat/xato, davomiylik, retralar, ta’sirlangan obyektlar.
Loglar: tuzilgan, correlation-ID, xatodagi qizil satr.
Treyslar: uzoq operatsiyalarning qadamlari taqsimlangan trassalarda ko’rinadi.
Alertlar: simptomlar (SLO) va texnik metriklar (muddat, xatolar%) bo’yicha.
12) Test va simulyatsiya
Artefaktlar mantig’i va parserlarining yunit-testlari.
Qum qutisi va kanareykada integratsiya testlari.
«Trenajyorlar» (dry-run + soxta provayderlar), real ssenariylarni replay qilish.
Mashqlar: aniq maqsadlar, xavfsizlik geytlari, AAR → RCA → CAPA.
13) Kod namunalari
Bash (panjarali skelet)
bash
!/usr/bin/env bash set -Eeuo pipefail trap 'echo "[ERR] line $LINENO"; exit 1' ERR
log(){ printf '%s %s\n' "$(date -Iseconds)" "$"; }
DRY=${DRY_RUN--true}
ensure_dep(){ command -v "$1" >/dev/null { echo "need $1"; exit 2; }; }
apply_change(){
local target="$1"
if [[ "$DRY" == "true" ]]; then log "[DRY] would update $target"
else kubectl apply -f "$target"
fi
}
main(){
ensure_dep kubectl for f in manifests/.yaml; do apply_change "$f"
done log "done"
}
main "$@"
Python (retrai + idempotentlik)
python import argparse, time, json, sys from pathlib import Path import requests
def with_retries(fn, attempts=5, base=0. 2):
for i in range(attempts):
try:
return fn()
except Exception as e:
sleep = base (2i)
time. sleep(sleep)
raise
def already_done(marker):
return Path(marker). exists()
def mark_done(marker):
Path(marker). write_text("ok")
def main():
ap = argparse. ArgumentParser()
ap. add_argument("--endpoint", required=True)
ap. add_argument("--marker", default="/tmp/op. marker")
args = ap. parse_args()
if already_done(args. marker):
print("idempotent: nothing to do"); return
def call():
r = requests. post(args. endpoint, json={"action":"rotate"})
r. raise_for_status()
return r. json()
resp = with_retries(call)
print(json. dumps(resp))
mark_done(args. marker)
if __name__ == "__main__":
sys. exit(main())
Ansible (idempotent vazifa)
yaml
- hosts: web become: true tasks:
- name: Ensure nginx present and enabled ansible. builtin. package:
name: nginx state: present
- name: Deploy config ansible. builtin. template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: '0644'
notify: restart nginx handlers:
- name: restart nginx ansible. builtin. service:
name: nginx state: restarted
Kubernetes CronJob (rejali rotatsiya)
yaml apiVersion: batch/v1 kind: CronJob metadata:
name: cert-rotate spec:
schedule: "0 3 "
concurrencyPolicy: Forbid jobTemplate:
spec:
template:
spec:
serviceAccountName: ops-automation restartPolicy: OnFailure containers:
- name: rotator image: registry/ops/rotator:1. 2. 3 args: ["--rotate", "--budget-ms=60000"]
envFrom:
- secretRef: { name: rotator-secrets }
GitHub Actions (ChatOps trigger)
yaml name: ops-deploy on:
workflow_dispatch:
inputs:
service: {required: true}
canary: {required: false, default: "5"}
jobs:
deploy:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- run:./scripts/deploy. sh "${{ inputs. service }}" --canary "${{ inputs. canary }}"
14) Joriy etish chek-varaqasi
- Har bir operatsiya uchun vosita tanlangan va runbook tasvirlangan.
- Dry-run, tasdiqlash va chegaralar (panjara) mavjud.
- Loglar tuzilgan, metriklar va alertlar ulangan.
- Ombordan sirlar, kirish minimal va vaqtinchalik.
- Testlar (birlik/integratsiya/kanareya) va simulyatsiyalar o’tkazildi.
- GitOps/PR-revyu majburiy, audit bor.
- Qaytish rejasi va muvaffaqiyat mezonlari hujjatlashtirilgan.
- Avtomatlashtirish SLO/xato byudjetlariga bog’langan.
15) Anti-patternlar
Idempotentlik va qaytishsiz skriptlar.
«Koddagi sirlar», hamma narsaga superadmin hisob-kitoblar.
Auditsiz prodda qo’lda tuzatishlar kiritish.
Deklarativ IaC o’rniga bo’lakli Bash-hayvonot bog’i.
Kodga tikilgan parametrlar - qayta foydalanish mumkin emas.
Hech qanday dry-run/kanareya yo’q → katta portlashlar.
Tuzilishi va korelyasiyasiz «odamlar uchun» loglari.
16) Ops-avtomatlashtirish etuklik metrikasi
Coverage:% avtomatlashtirish va runbook.
Success rate/Retry rate avtomatik vazifalar.
Mean time to execute (o’rtacha davomiyligi) va on-time (muddati).
Change failure rate avtomatlashtirishdan oldin/keyin.
Audit-to’liqlik: to’liq evidence bilan operatsiyalar%
Sekyuriti: kalitlar/sertifikatlar rotatsiyasi vaqti, JIT kirish ulushi.
17) Jami
Ops-avtomatlashtirish - bu turli xil skriptlar to’plami emas, balki tizim: idempotent harakatlar, xavfsiz panjara, kuzatuv, sirlar va nazorat ostidagi kirish, GitOps/ChatOps, testlar va mashqlar. Bunday tizimda operatsiyalar tez, oldindan aytib bo’lmaydigan va auditoriyalanadigan bo’lib, biznes barqaror relizlar va hodisalar xavfi past bo’ladi.