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

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:
Análise de logs (ROI imediato)
Review automatizado em 1 repo
Integração em CI/CD não-crítico
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
.claudercem projetos principais
Links úteis:
CLI docs:
https://docs.claude.com/en/docs/build-with-claude/cliAPI reference:
https://docs.claude.com/en/api
Todos os exemplos foram testados em produção. Alguns falharam espetacularmente - documentei os que funcionaram.





