Ops-avtomatlaşdırma və skriptlər
1) Niyə əməliyyatları avtomatlaşdırmaq
MTTR/insan səhvlərini azaldır, buraxılışları və reaksiyaları sürətləndirir.
Hərəkətləri təkrar və audit edir (komplayens).
Təkmilləşdirmə üçün mühəndislərin vaxtını azad edir, rutin deyil.
2) Əsas prinsiplər
1. İdempotentlik: yenidən başlanğıc → eyni nəticə.
2. Təhlükəsiz məhəccərlər: dry-run, təsdiqlər, limitlər, avtomatik geri çəkilmələr.
3. Müşahidə: log/metrik/treys hər skript/paypline daxili.
4. Konfiqurasiya> sabitlər kodda: bütün parametrlər/manifestlər vasitəsilə.
5. GitOps/Docs-as-Code: əməliyyat kodu versiyası, review, test.
6. Kiçik addımlar: kanarya payları, batches, büdcələr ilə retrai.
7. Repoda heç bir sirr yoxdur: yalnız gizli saxlama vasitəsilə.
3) Avtomatlaşdırma tapşırıqları sinifləri
Remediasiya və insidentlər: geri çəkilmə, provayderlərin dəyişdirilməsi, deqradasiya fiqa bayraqları.
Planlı işlər: sertifikatların/açarların rotasiyası, DB miqrasiyası (expand → migrate → contract).
Infrastrukturun idarə edilməsi: IaC (Terraform), konfiqurasiyalar (Ansible), K8s manifestlər.
DataOps və DataOps: backfills, ETL, keyfiyyət validasiyası.
Xaoc/DR təlimləri: təhlükəsizlik qapıları ilə uğursuzluq simulyasiyaları.
4) Alət seçmək üçün necə
Bash - qısa glue skriptləri, CLI orkestrasiyası.
Python - məntiq/SDK, retralar, API, JSON/YAML ilə iş.
Ansible - idempotent konfiqurasiyası, agentlərə ehtiyac yoxdur.
Terraform - deklarativ infrastruktur.
Kubernetes Jobs/CronJobs - paket tapşırıqları/planlaşdırma.
Argo/Airflow - asılı DAG və orkestr.
ChatOps - audit chat təhlükəsiz başlanğıc.
5) Avtomatika arxitekturası (istinad)
CLI/ChatOps → Controller (GitOps/orkestrator) → İfaçılar (Ansible/Terraform/K8s Job) → Monitorinq (log/metrika/treys) → Audit/tiketinq → Doc-artefaktlar (evidence).
6) İdempotentlik və vəziyyətin idarə edilməsi
«Yoxlayın, sonra dəyişdirin»: detect-then-act (əgər artıq OK varsa - heç nə etməyin).
Uzun prosedurlar üçün «icra nişanları» (state/lock) saxlayın.
Prosedurları atomik addımlara bölün.
7) Səhvlər, retrajlar və geri dönüşlər
Eksponensial gecikmə və jitter ilə retrailer.
Əməliyyat vaxtının büdcəsi (tapşırıq üçün ümumi SLA).
Geri dönüş və «stop düyməsi» (circuit breaker) həmişə təmin edilir.
Açıq qaytarma kodları və strukturlaşdırılmış səhvlər.
8) Təhlükəsizlik və sirləri
RBAC/ABAC, minimum imtiyazlar, müvəqqəti tokenlər (JIT/JEA).
Vault/KMS/Cloud Secret Manager-dən sirlər; açarları fırlanır.
«Vəzifələrin ayrılması»: yazan - təsdiq edən və prodda işə salan deyil.
Audit-jurnal: kim/nə/nə/hansı nəticə ilə.
9) GitOps и ChatOps
PR → testlər → review → merj → çərşənbə avtomatik promosyon.
Chat komandaları (məsələn, '/ops deploy checkout --canary 5% ') paylaynları çağırır; botlar evidence tətbiq və dashboard links.
10) Planlaşdırma və orkestr
CronJobs/DAG asılılıqları və müddətləri ilə.
Rəqabət qabiliyyəti: 'Forbid', 'Replace', 'Allow' (K8s) vəzifəsindən asılı olaraq.
Resources/kvota siyasəti «yemək» prod deyil.
11) Avtomatlaşdırma müşahidə
Metriklər: uğur/səhv, müddət, retralar, təsirlənmiş obyektlər.
Log: struktur, correlation-ID, qırmızı xəta.
Traces: paylanmış izlərdə uzun əməliyyatların addımları görünür.
Alertlər: simptomlara görə (SLO) və texniki metriklərə görə (son tarix,% səhvlər).
12) Test və simulyasiya
Vahid məntiq testləri və artefaktların parserləri.
Qum qutusunda və kanaryada inteqrasiya testləri.
«Trenajorlar» (dry-run + uydurma provayderlər), real ssenariləri replay.
Təlimlər: aydın hədəflər, təhlükəsizlik geytaları, AAR → RCA → CAPA.
13) Kod şablonları
Bash (məhəccərli 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 (retray + idempotent)
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 vəzifəsi)
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 (planlı rotasiya)
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) Giriş çek siyahısı
- Hər bir əməliyyat üçün bir vasitə seçilir və runbook təsvir olunur.
- Dry-run, təsdiq və limitləri (məhəccərlər) var.
- Log strukturlaşdırılmış, metrik və alert bağlıdır.
- Saxlama sirləri, minimal və müvəqqəti giriş.
- Testlər (birlik/inteqrasiya/kanarya) və simulyasiyalar həyata keçirilmişdir.
- GitOps/PR review tələb olunur, audit var.
- Geri dönüş planı və uğur meyarları sənədləşdirilmişdir.
- Avtomatlaşdırma SLO/səhv büdcələrinə bağlıdır.
15) Anti-nümunələr
İdempotentlik və geri qaytarılmadan skriptlər.
«Kodda sirləri», hər şey üçün superadmin qeydlər.
Audit olmadan bir məhsulda əl düzəlişləri.
Parça Bash zoopark əvəzinə deklarativ IaC.
Koda «tikilmiş» parametrləri - təkrar istifadə yoxdur.
No dry-run/kanaryalar → böyük partlayışlar.
Strukturu və korelyasiyası olmayan «insanlar üçün» loqlar.
16) Ops-avtomatlaşdırma yetkinlik metrik
Coverage:% avtomatlaşdırma və runbook əməliyyatları.
Success rate/Retry rate avtomatik tapşırıqlar.
Mean time to execute (orta müddət) və on-time (müddət ərzində).
Change failure rate avtomatlaşdırmadan əvvəl/sonra.
Audit-tamlıq: tam evidence ilə əməliyyatların%.
Təhlükəsizlik: açar/sertifikatların rotasiya vaxtı, JIT giriş payı.
17) Yekun
Ops-avtomatlaşdırma ayrı-ayrı skriptlərin dəsti deyil, sistem: idempotent hərəkətləri, təhlükəsiz məhəccərlər, müşahidə, sirlər və nəzarət altındakı girişlər, GitOps/ChatOps, testlər və təlimlər. Belə bir sistemdə əməliyyatlar sürətli, proqnozlaşdırıla bilən və dinlənilə bilən olur - biznes isə sabit buraxılışlar və aşağı insident riskini alır.