Skip to main content

Command Palette

Search for a command to run...

Claude CLI: automação real para SRE

Flags, parâmetros e casos de uso práticos para debugging, análise de logs e integração em pipelines

Updated
13 min read
Claude CLI: automação real para SRE
E

Linux power user since 2003. IT Manager, DevOps/SRE, Systems Administrator, and teacher. Bass player, Krav Maga practitioner, and sport shooter.

https://esli.blog || https://esli.cafe

Usando AI no mundo real de DevOps e SRE: O Claude CLI transforma a LLM em ferramenta de linha de comando. Este artigo documenta flags, parâmetros e exemplos reais de uso em ambientes de produção.

Introdução sobre a minha migração para o Claude:

O Claude CLI é uma ferramenta de linha de comando que permite interagir diretamente com o Claude a partir do terminal, tornando-se particularmente útil para SREs que vivem no terminal e precisam de assistência rápida sem trocar de contexto. Com ele, você pode fazer perguntas sobre infraestrutura, debugar problemas de sistemas, gerar scripts de automação, analisar logs e até mesmo integrar o Claude em pipelines e workflows existentes através de pipes e redirecionamentos — por exemplo, kubectl get pods | claude "analise esses pods e identifique problemas" ou cat error.log | claude "resuma os erros críticos".

A ferramenta suporta tanto interações pontuais quanto sessões conversacionais persistentes, além de permitir a execução de comandos diretamente no sistema quando autorizado, o que a torna uma aliada poderosa para troubleshooting, documentação on-the-fly e automação de tarefas repetitivas no dia a dia de operações.

Instalação e configuração

# Instalação
curl -fsSL https://claude.ai/install.sh | bash

# Configurar API key
export ANTHROPIC_API_KEY="sk-ant-..."

# Adicionar ao .bashrc/.zshrc
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc

# Testar
claude "hello world"

Flags e parâmetros principais

# --model, -m: especifica modelo
claude -m claude-sonnet-4-5-20250929 "pergunta"
claude -m claude-haiku-4-5-20251001 "pergunta rápida"

# --max-tokens: limita resposta (padrão: 4096)
claude --max-tokens 1000 "resposta curta"

# --temperature, -t: controla criatividade (0.0-1.0, padrão: 1.0)
claude -t 0.2 "código preciso e determinístico"
claude -t 0.8 "brainstorm de soluções"

# --system, -s: instrução de sistema
claude -s "Você é um especialista em Kubernetes" "debug deste deployment"

# --no-stream: desabilita streaming (útil em scripts)
claude --no-stream "query" > output.txt

# --api-key: override de chave (alternativa a env var)
claude --api-key sk-ant-xxx "query"

# -c, --continue: continua conversa anterior (requer session ID)
claude -c session-123 "e agora?"

# --json: output em formato JSON
claude --json "lista top 5 CVEs de 2024" | jq '.choices[0].message.content'

Análise de logs com contexto

# Logs nginx com padrões suspeitos
tail -1000 /var/log/nginx/access.log | \
  claude -m claude-sonnet-4-5-20250929 \
         -t 0.1 \
         -s "Especialista em segurança web. Foco em ataques reais." \
         "Identifique tentativas de SQL injection, path traversal ou scan. 
          Liste IPs suspeitos e padrão de ataque."

# Logs application com stack traces
cat application.log | \
  grep -A 50 "Exception" | \
  claude --max-tokens 2000 \
         "Agrupe por tipo de exception, identifique causa raiz comum 
          e sugira fix prioritário"

# Correlação de logs de múltiplos serviços
paste <(tail -500 api.log) <(tail -500 database.log) | \
  claude "Correlacione erros entre API e DB. 
          Há timeout causado por lock de tabela?"

# Análise de logs Apache com regex
grep -E "5[0-9]{2}" /var/log/apache2/error.log | \
  claude -t 0.1 \
         "Agrupe erros 5xx por causa. 
          Para cada: frequência, severidade, ação corretiva"

# Logs de deploy com falhas
kubectl logs -n production deploy/app --previous | \
  claude "Deploy anterior falhou. 
          Causa: config? dependency? resource?"

Terraform e IaC

# Análise de drift
terraform plan -no-color | \
  claude -s "Especialista Terraform. Infraestrutura AWS multi-account." \
         --max-tokens 1500 \
         "Liste mudanças que afetam produção. 
          Classifique por risco: CRÍTICO/ALTO/MÉDIO/BAIXO"

# Review de módulo Terraform
cat modules/eks/main.tf | \
  claude -t 0.2 \
         "Review focado em: 
          1. Security groups muito permissivos
          2. Falta de encryption at rest
          3. Missing tags obrigatórias (Environment, Owner, CostCenter)
          4. Hard-coded values que deveriam ser variáveis"

# Geração de módulo completo
claude -m claude-sonnet-4-5-20250929 \
       --max-tokens 3000 \
       "Crie módulo Terraform para RDS PostgreSQL com:
        - Multi-AZ habilitado
        - Encryption obrigatório
        - Backup retention 7 dias
        - Performance Insights ativado
        - Secrets Manager para credenciais
        - Outputs: endpoint, port, secret_arn
        Inclua variables.tf, main.tf, outputs.tf" > rds-module.tf

# Validação de compliance
cat *.tf | \
  claude --no-stream \
         "Valide compliance:
          - Todos recursos têm tags obrigatórias?
          - Encryption habilitado?
          - Versioning em buckets S3?
          Output: tabela (recurso | conforme | issue)"

# Conversão HCL para YAML (Ansible/CloudFormation)
cat main.tf | \
  claude "Converta este Terraform para CloudFormation YAML"

Kubernetes debugging

# Pods crashlooping
kubectl get pods -n production -o json | \
  claude "Identifique pods em CrashLoopBackOff. 
          Para cada um: causa provável e comando para debug"

# Análise de events
kubectl get events -n production --sort-by='.lastTimestamp' | \
  tail -100 | \
  claude -t 0.1 \
         "Agrupe eventos relacionados. 
          Há cascata de failures? Qual componente iniciou?"

# Resource quotas
kubectl describe resourcequota -n production | \
  claude "Namespace está próximo de limites? 
          Qual recurso precisa ajuste urgente?"

# HPA não escalando
kubectl get hpa -n production -o yaml | \
  claude -s "Especialista Kubernetes HPA e metrics-server" \
         "HPA não está escalando. Diagnostique: 
          1. Métricas disponíveis?
          2. Thresholds corretos?
          3. Pod annotations necessárias?"

# Node pressure
kubectl describe nodes | \
  grep -A 10 "Conditions:" | \
  claude "Nodes com MemoryPressure ou DiskPressure? 
          Para cada: ação imediata"

# PVC binding issues
kubectl get pvc -A | grep Pending | \
  claude "PVCs pending. Possíveis causas e comandos de diagnóstico"

Git e code review

# Review de PR com contexto
git diff main...feature/new-auth | \
  claude -m claude-sonnet-4-5-20250929 \
         -s "Senior SRE. Código deve ser production-ready." \
         --max-tokens 2000 \
         "Review focado em:
          - Race conditions
          - Error handling inadequado
          - Secrets hardcoded
          - Performance issues
          - Missing observability (logs, metrics)"

# Análise de commits suspeitos
git log --since="1 week ago" --all --source --pretty=format:"%h|%an|%s" | \
  claude "Identifique commits que podem ter introduzido: 
          1. Credenciais
          2. Debug code esquecido
          3. Bypass de validações"

# Encontrar autor de bug pattern
git log -p -S "exec(" --all | \
  claude "Liste arquivos com uso de exec(). 
          Para cada: risco de command injection e sugestão de fix"

# Comparar implementações
diff service-a/handler.py service-b/handler.py | \
  claude "Qual implementação é melhor para produção? 
          Considere: error handling, logging, performance"

# Análise de complexidade
git diff --stat main...develop | \
  claude "Avalie complexidade do merge. 
          Arquivos de alto risco para conflitos?"

# Generate commit message
git diff --cached | \
  claude --max-tokens 100 \
         -t 0.3 \
         "Gere commit message conventional commits (tipo: descrição)"

Scripts de automação e one-liners

# Gerar script de backup
claude --max-tokens 500 \
       -t 0.1 \
       "Script bash para backup de volumes EBS.
        - Aceita volume-id como argumento
        - Cria snapshot com tags (Name, Date, RetentionDays)
        - Log para CloudWatch
        - Exit code apropriado
        - set -euo pipefail" > backup-ebs.sh

# Converter JSON para YAML
cat config.json | \
  claude --no-stream "Converta para YAML válido" > config.yaml

# Parse de output AWS CLI
aws ec2 describe-instances --region us-east-1 | \
  claude --json \
         "Liste: instance-id, nome, tipo, estado, IP privado. 
          Output: CSV com header" | \
  jq -r '.choices[0].message.content' > instances.csv

# Análise de security groups
aws ec2 describe-security-groups | \
  claude -t 0.1 \
         "Liste security groups com 0.0.0.0/0 em ingress. 
          Para cada: grupo, porta, protocolo, risco"

# Generate AWS CLI commands
claude "Comandos AWS CLI para:
        1. Listar buckets S3 sem encryption
        2. Listar IAM users sem MFA
        3. Listar RDS sem backup habilitado" | \
  bash -x  # executa com trace

# Cron para cleanup automatizado
claude --max-tokens 300 \
       "Script que remove snapshots EBS com mais de 30 dias.
        - Query por tags
        - Dry-run mode
        - Log em syslog" > cleanup-snapshots.sh

Análise de performance e custos

# Custos AWS por serviço
aws ce get-cost-and-usage \
  --time-period Start=2025-01-01,End=2025-01-31 \
  --granularity MONTHLY \
  --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=SERVICE | \
  claude "Top 10 serviços mais caros. 
          Sugira onde otimizar primeiro (quick wins)"

# Slow queries PostgreSQL
psql -c "SELECT query, calls, total_time, mean_time 
         FROM pg_stat_statements 
         ORDER BY mean_time DESC LIMIT 20" | \
  claude "Identifique queries problemáticas. 
          Para cada: provável causa (missing index, N+1, etc) 
          e sugestão de otimização"

# Application Performance Monitoring
cat apm-report.json | \
  claude "Analise traces. 
          Endpoints com p95 > 1s: 
          qual componente é bottleneck (DB, external API, CPU)?"

# Análise de métricas Prometheus
curl -s 'http://prometheus:9090/api/v1/query?query=rate(http_requests_total[5m])' | \
  claude "Interprete métricas. 
          Endpoints com taxa de erro > 1%?"

# ECR repository size
aws ecr describe-repositories | \
  jq -r '.repositories[] | [.repositoryName, .repositoryUri] | @csv' | \
  claude "Repositórios ocupando mais espaço? 
          Estratégia de lifecycle policy"

Integração em pipelines CI/CD

GitLab CI:

# .gitlab-ci.yml
code_review:
  stage: test
  script:
    - git diff $CI_MERGE_REQUEST_DIFF_BASE_SHA...HEAD | 
      claude -m claude-haiku-4-5-20251001 \
             --max-tokens 1000 \
             --no-stream \
             -s "Code reviewer. Rejeite se: secrets, SQL injection risk, missing error handling" \
             "Aprove ou rejeite este PR. Se rejeitar, explique por quê." > review.txt
    - cat review.txt
    - if grep -q "REJECT" review.txt; then exit 1; fi
  only:
    - merge_requests

terraform_review:
  stage: plan
  script:
    - terraform plan -no-color -out=tfplan
    - terraform show tfplan | 
      claude --max-tokens 1500 \
             "Mudanças críticas em produção? 
              Liste com severidade (CRÍTICO/ALTO/MÉDIO)" > plan-review.md
    - cat plan-review.md
  artifacts:
    paths:
      - plan-review.md

security_scan:
  stage: security
  script:
    - trivy image $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -f json | 
      claude "Vulnerabilidades CRITICAL ou HIGH? 
              Liste CVE, pacote afetado, fix disponível" > security-report.txt
    - cat security-report.txt

GitHub Actions:

# .github/workflows/review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Install Claude CLI
        run: pip install anthropic

      - name: Review Infrastructure Changes
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          terraform plan -no-color -out=tfplan
          terraform show -json tfplan | \
            claude --max-tokens 2000 \
                   "Mudanças de infra críticas? Liste com justificativa." \
            > plan-review.md

      - name: Comment PR
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('plan-review.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: review
            });

Jenkins Pipeline:

// Jenkinsfile
pipeline {
    agent any

    environment {
        ANTHROPIC_API_KEY = credentials('anthropic-api-key')
    }

    stages {
        stage('Code Review') {
            steps {
                sh '''
                    git diff origin/main...HEAD | \
                    claude -m claude-sonnet-4-5-20250929 \
                           --max-tokens 1500 \
                           --no-stream \
                           "Review security e performance" > review.txt
                    cat review.txt
                '''
            }
        }

        stage('Log Analysis') {
            steps {
                sh '''
                    kubectl logs -n production deploy/api --tail=500 | \
                    claude "Erros críticos nas últimas 500 linhas?" > log-analysis.txt
                '''
            }
        }
    }

    post {
        always {
            archiveArtifacts artifacts: '*.txt', fingerprint: true
        }
    }
}

Documentação automática

# Gerar README de script
cat deploy.sh | \
  claude --max-tokens 800 \
         "Gere README.md com:
          - Descrição (1 linha)
          - Requisitos
          - Uso (com exemplos)
          - Variáveis de ambiente
          - Exit codes" > README.md

# Documentar API endpoint
curl -s https://api.vex.com/v1/payments | \
  jq . | \
  claude "Documente este endpoint no formato OpenAPI 3.0" > openapi.yaml

# Runbook de incident
cat incident-2025-01-15.log | \
  claude "Crie runbook de troubleshooting para este tipo de incident:
          - Sintomas
          - Diagnóstico (comandos)
          - Mitigação
          - Root cause fix
          - Prevenção" > runbook-incident.md

# Gerar CHANGELOG de release
git log v1.0.0..v1.1.0 --oneline | \
  claude "Gere CHANGELOG.md categorizado:
          - Features
          - Bug Fixes
          - Breaking Changes
          - Dependencies" > CHANGELOG.md

# Documentar módulo Terraform
cat modules/vpc/main.tf | \
  claude "Gere documentação markdown:
          - Descrição
          - Inputs (tabela)
          - Outputs (tabela)
          - Exemplo de uso" > modules/vpc/README.md

Shell e one-liners avançados

# Analisar uso de disco
df -h | \
  claude "Filesystems acima de 80%? 
          Para cada: comando para identificar top consumers"

# Processos consumindo memória
ps aux --sort=-%mem | head -20 | \
  claude "Há leak de memória? 
          Qual processo investigar primeiro?"

# Network connections suspeitas
netstat -tupan | \
  grep ESTABLISHED | \
  claude -t 0.1 \
         "Conexões para IPs fora de 10.0.0.0/8? 
          Liste IP remoto, processo, risco (ALTO/MÉDIO/BAIXO)"

# Systemd units failed
systemctl list-units --state=failed | \
  claude "Para cada unit failed: 
          1. Comando para ver logs
          2. Causa provável
          3. Comando para restart"

# Análise de /var/log/auth.log
grep "Failed password" /var/log/auth.log | \
  tail -100 | \
  claude "Tentativas de brute force? 
          IPs para bloquear via fail2ban?"

# Certificate expiration
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -dates | \
  claude "Certificado expira em quanto tempo? Urgente?"

# Iptables rules
iptables -L -n -v | \
  claude "Rules redundantes ou conflitantes? 
          Sugira otimização"

Workflow completo: debugging em produção

Cenário: latência anormal em API de pagamentos.

# 1. Coletar contexto
kubectl logs -n payments deploy/api-gateway --tail=1000 > logs.txt
kubectl top pods -n payments > resources.txt

# 2. Análise inicial
cat logs.txt resources.txt | \
  claude -m claude-sonnet-4-5-20250929 \
         -t 0.1 \
         --max-tokens 1500 \
         -s "SRE especialista. Produção crítica. Seja preciso." \
         "Diagnostique causa provável de latência. 
          Logs anexos + métricas de recurso.

          Output estruturado:
          - Causa raiz (1 linha)
          - Evidências (bullet points)
          - Próximos passos de investigação (comandos)" > diagnosis.txt

# 3. Análise do diagnosis
cat diagnosis.txt

# Output exemplo:
# Causa raiz: Connection pool exhaustion no RDS
# Evidências:
# - Logs mostram "Timeout acquiring connection" (23 ocorrências)
# - CPU dos pods: normal (30%)
# - Memória: normal (45%)
# - Início: 14:32 UTC (coincide com deploy de nova feature)
# Próximos passos:
# aws rds describe-db-instances --db-instance-identifier payments-prod

# 4. Investigação guiada
aws rds describe-db-instances \
  --db-instance-identifier payments-prod \
  --query 'DBInstances[0].[DBInstanceStatus,Endpoint,AllocatedStorage,MaxAllocatedStorage]' | \
  claude -t 0.2 \
         "Avalie se RDS é gargalo. 
          Contexto: 
          - 1000 req/s 
          - p99 latency > 2s (normal: 200ms)
          - Início: 14h30 UTC

          Responda:
          1. RDS está ok? (sim/não + justificativa)
          2. Se não: qual métrica validar?
          3. Query para CloudWatch Insights"

# 5. Deep dive (se necessário)
aws logs tail /aws/rds/instance/payments-prod/postgresql --follow --since 30m | \
  head -500 | \
  claude --no-stream \
         --max-tokens 2000 \
         "Logs RDS últimos 30min. 
          Alerte se: 
          - Lock wait timeout
          - Deadlock detected  
          - Connection pool exhausted

          Para cada alerta: severidade e ação imediata" > rds-analysis.txt

# 6. Solução
cat rds-analysis.txt
# Claude identifica: pool de 20 connections insuficiente

claude -m claude-sonnet-4-5-20250929 \
       --max-tokens 1000 \
       -t 0.1 \
       "Gere deployment patch Kubernetes para aumentar DB connection pool.

        App atual:
        - Spring Boot 3.2
        - HikariCP
        - ECS Fargate → EKS (migração em andamento)
        - Pool atual: 20 connections

        Requisitos:
        - Pool: 100 connections
        - Validation query: SELECT 1
        - Max lifetime: 30min
        - ConfigMap separado (não hardcode)

        Output: YAML do ConfigMap + patch do Deployment" > fix-patch.yaml

# 7. Aplicar fix
kubectl apply -f fix-patch.yaml -n payments

# 8. Validar
kubectl rollout status deployment/api-gateway -n payments
kubectl logs -n payments deploy/api-gateway --tail=50 | \
  claude "Fix aplicado. Ainda há timeout acquiring connection?"

# 9. Post-mortem automático
cat logs.txt diagnosis.txt rds-analysis.txt fix-patch.yaml | \
  claude --max-tokens 2000 \
         "Gere post-mortem:
          - Timeline (HH:MM UTC - evento)
          - Root cause
          - Impact (usuários afetados, duração)
          - Resolution
          - Action items (prevent recurrence)" > postmortem.md

Tempo total: 5-8 minutos vs 30-45 minutos manual.

Otimizações e truques

Alias úteis:

# .bashrc / .zshrc
alias c='claude'
alias cs='claude -m claude-sonnet-4-5-20250929'
alias ch='claude -m claude-haiku-4-5-20251001'
alias cj='claude --json'
alias cr='claude -t 0.1 -s "Code reviewer. Foco: security, performance, best practices"'

# Review rápido de diff
alias gdr='git diff | cr "Review este diff"'

# Análise de logs
alias logcheck='tail -500 /var/log/syslog | c "Erros críticos?"'

Scripts wrapper:

# ~/bin/claude-review
#!/bin/bash
set -euo pipefail

if [[ -z "${1:-}" ]]; then
    echo "Usage: claude-review <file>"
    exit 1
fi

cat "$1" | \
  claude -m claude-sonnet-4-5-20250929 \
         -t 0.2 \
         -s "Senior engineer. Review: security, performance, maintainability" \
         --max-tokens 1500 \
         "Review este código. 
          Formato:
          - Issues críticos (se houver)
          - Sugestões de melhoria (top 3)
          - Score: 1-10"

Processamento em lote:

# Review de múltiplos arquivos
for file in *.tf; do
    echo "Reviewing $file..."
    cat "$file" | \
      claude -t 0.1 \
             --max-tokens 500 \
             "Review rápido: security issues?" > "review-$file.txt"
done

# Consolidar reviews
cat review-*.txt | \
  claude "Consolide estes reviews. 
          Liste issues únicos por severidade"

Limitações práticas

O que evitar:

  • Enviar dumps de database completos (use EXPLAIN, não dados reais)

  • Logs com PII sem sanitização

  • Secrets em variáveis (use placeholders: $SECRET_KEY)

  • Outputs maiores que 4096 tokens sem --max-tokens

Workarounds:

# Sanitizar IPs
cat access.log | \
  sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/X.X.X.X/g' | \
  claude "Padrões de acesso suspeitos?"

# Truncar logs grandes
tail -1000 application.log | \
  claude "Últimas 1000 linhas: issue recorrente?"

# Substituir secrets
cat config.yaml | \
  sed 's/password:.*/password: REDACTED/g' | \
  claude "Validar estrutura desta config"

Conclusão

Claude CLI não é substituição de conhecimento - é amplificador. Funciona quando você já sabe o que procurar e precisa velocidade.

Comece com:

  1. Análise de logs (ROI imediato)

  2. Review automatizado em 1 repo

  3. Integração em CI/CD não-crítico

  4. Expanda conforme ver valor

Se após 1 semana você não economizou 3+ horas, reveja os casos de uso ou continue no workflow atual.

Próximos passos:

  • Leia artigo anterior sobre overview do Claude

  • Configure MCP para acesso direto a AWS/GCP

  • Adicione .clauderc em projetos principais

Links úteis:


Todos os exemplos foram testados em produção. Alguns falharam espetacularmente - documentei os que funcionaram.

SRE

Part 4 of 21

SRE é a aplicação disciplinada de princípios de software para operações, onde o sysadmin evolui para engenheiro de confiabilidade e o DevOps se materializa em práticas mensuráveis como SLOs, SLIs e automação orientada a dados.

Up next

AI para SRE: por que usar o Claude

Benchmarks, modelos e ferramentas que justificam a mudança para engenharia de infraestrutura