AI для DevOps: автоматизация инфраструктуры с помощью LLM
aidevopsautomationllm
LLM — это не только чат-боты. В DevOps они решают реальные задачи: разбирают логи, генерируют конфиги, помогают с инцидентами. Покажу конкретные сценарии, которые использую.

1. Анализ логов
Классическая задача: в логах 10 000 строк, нужно найти причину проблемы. LLM справляется:
import ollama
import subprocess
def analyze_logs(service: str, lines: int = 100) -> str:
# Берём последние N строк из journald
result = subprocess.run(
["journalctl", "-u", service, "-n", str(lines), "--no-pager"],
capture_output=True, text=True
)
response = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "user",
"content": f"""Проанализируй логи сервиса {service}.
Найди ошибки, предупреждения и аномалии.
Предложи решение, если есть проблемы.
Логи:
{result.stdout[-5000:]}""" # ограничиваем контекст
}]
)
return response["message"]["content"]
print(analyze_logs("nginx")) Результат:
Обнаружены проблемы:
1. 15 ошибок "upstream timed out" за последние 5 минут — бэкенд не успевает
отвечать. Рекомендация: увеличить proxy_read_timeout или проверить нагрузку
на бэкенд.
2. 3 ошибки "worker_connections are not enough" — пул воркеров переполнен.
Рекомендация: увеличить worker_connections в nginx.conf. 2. Генерация конфигурации
Описываем задачу на естественном языке — получаем конфиг:
def generate_config(description: str, config_type: str) -> str:
response = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "system",
"content": f"Ты — DevOps-инженер. Генерируй только {config_type} "
"конфигурации. Без объяснений, только код."
}, {
"role": "user",
"content": description
}]
)
return response["message"]["content"]
# Nginx
nginx = generate_config(
"Reverse proxy для FastAPI на порту 8000 с rate limiting 10 req/sec, "
"SSL от Let's Encrypt для домена api.example.com",
"nginx"
)
# Docker Compose
compose = generate_config(
"PostgreSQL 16 + Redis 7 + pgAdmin, "
"с healthcheck-ами, volumes для данных, сеть app-network",
"docker-compose"
)
# Ansible task
ansible = generate_config(
"Установить и настроить fail2ban: защита SSH (5 попыток, бан на 1 час), "
"логирование в /var/log/fail2ban.log",
"Ansible YAML (FQCN модули)"
) 
3. Alertmanager → LLM → рекомендация
Подключаем LLM к алертам для автоматической диагностики:
from fastapi import FastAPI, Request
import ollama
app = FastAPI()
@app.post("/webhook/alertmanager")
async def handle_alert(request: Request):
payload = await request.json()
for alert in payload.get("alerts", []):
labels = alert["labels"]
annotations = alert.get("annotations", {})
diagnosis = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "system",
"content": "Ты — SRE-инженер. Анализируй алерты и предлагай "
"действия для устранения. Кратко, по пунктам."
}, {
"role": "user",
"content": f"""Алерт: {labels.get('alertname')}
Severity: {labels.get('severity')}
Instance: {labels.get('instance')}
Описание: {annotations.get('description', 'нет')}
Значение: {annotations.get('value', 'нет')}"""
}]
)
# Отправляем в Telegram
await send_telegram(
f"🔔 {labels['alertname']}\n"
f"📊 {annotations.get('description', '')}\n\n"
f"🤖 AI-диагностика:\n{diagnosis['message']['content']}"
)
return {"status": "ok"} 4. Diff-ревью для конфигов
Перед применением изменений — проверка через LLM:
def review_config_change(old_config: str, new_config: str, config_type: str) -> str:
response = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "system",
"content": "Ты — senior DevOps-инженер. Проверяй изменения в конфигах "
"на ошибки, проблемы безопасности и best practices."
}, {
"role": "user",
"content": f"""Тип конфига: {config_type}
БЫЛО:
{old_config}
СТАЛО:
{new_config}
Проверь:
1. Есть ли ошибки синтаксиса?
2. Есть ли проблемы безопасности?
3. Соответствует ли best practices?
4. Могут ли изменения вызвать даунтайм?"""
}]
)
return response["message"]["content"] 5. Автогенерация документации
def document_ansible_role(role_path: str) -> str:
"""Генерирует README для Ansible-роли."""
import os
files_content = ""
for root, _, files in os.walk(role_path):
for f in files:
if f.endswith(('.yml', '.yaml', '.j2')):
path = os.path.join(root, f)
content = open(path).read()
files_content += f"\n### {path}\n```yaml\n{content}\n```\n"
response = ollama.chat(
model="llama3.1:8b",
messages=[{
"role": "user",
"content": f"""Сгенерируй README.md для Ansible-роли.
Включи: описание, переменные (defaults), зависимости, пример использования.
Файлы роли:
{files_content[:8000]}"""
}]
)
return response["message"]["content"] Ограничения
- Не доверяйте слепо: LLM может сгенерировать синтаксически правильный, но логически неверный конфиг
- Всегда проверяйте:
nginx -t,ansible-playbook --check,docker compose config - Контекст ограничен: LLM не знает вашу инфраструктуру, если не дать ей контекст
- Не для продакшена без review: AI-сгенерированные конфиги — это черновик, а не финальная версия
Итого
LLM в DevOps — это ускоритель, а не замена инженера. Анализ логов, генерация конфигов, диагностика алертов — всё это экономит время. Но финальное решение всегда за человеком.