| name | log-analysis |
| description | Cross-platform log analysis patterns and techniques |
| homepage | https://www.gnu.org/software/grep/manual/ |
| metadata | {"emoji":"📋","version":"1.0.0","author":"Gourav Shah","license":"MIT","requires":{"any_bins":["grep","awk","jq"]},"tags":["logs","debugging","analysis","sre"]} |
Log Analysis
Techniques for analyzing logs across different platforms and formats.
When to Use This Skill
Use this skill when:
- Investigating errors or issues
- Searching for patterns in logs
- Correlating events across systems
- Building log queries
Universal Patterns
Search Basics
grep "ERROR" app.log
grep -i "error" app.log
grep -n "ERROR" app.log
grep -C 3 "ERROR" app.log
grep -B 3 -A 3 "ERROR" app.log
grep -c "ERROR" app.log
Multiple Patterns
grep -E "ERROR|WARN|FATAL" app.log
grep "ERROR" app.log | grep "database"
grep "ERROR" app.log | grep -v "expected"
Time-Based Filtering
grep "$(date '+%Y-%m-%d %H')" app.log
awk '/2024-01-15 10:00/,/2024-01-15 11:00/' app.log
tail -1000 app.log | grep "ERROR"
Kubernetes Logs
Pod Logs
kubectl logs <pod>
kubectl logs <pod> --previous
kubectl logs -f <pod>
kubectl logs --tail=100 <pod>
kubectl logs --since=1h <pod>
kubectl logs <pod> --all-containers
kubectl logs -l app=nginx --all-containers
Multi-Pod Logs
kubectl logs -l app=myapp --all-containers --prefix
stern myapp -n namespace
stern "myapp-.*" --since 1h
Search in Logs
kubectl logs <pod> | grep -i error
kubectl logs --timestamps <pod> | grep "ERROR"
kubectl logs --since=1h <pod> | grep -E "ERROR|Exception"
Docker Logs
docker logs <container>
docker logs -f <container>
docker logs --tail 100 <container>
docker logs --since 1h <container>
docker logs -t <container>
docker logs <container> 2>&1 | grep "ERROR"
JSON Logs (jq)
Basic Parsing
cat log.json | jq .
cat log.json | jq '.message'
cat log.json | jq '{time: .timestamp, msg: .message}'
Filtering
cat log.json | jq 'select(.level == "error")'
cat log.json | jq 'select(.message | contains("database"))'
cat log.json | jq 'select(.level == "error" and .service == "api")'
JSONL (JSON Lines)
cat logs.jsonl | jq -c 'select(.level == "error")'
cat logs.jsonl | jq -r '.message'
cat logs.jsonl | jq -r '.level' | sort | uniq -c | sort -rn
CloudWatch Logs
aws logs tail /aws/lambda/function-name --follow
aws logs tail /aws/lambda/function-name --since 1h
aws logs tail /aws/lambda/function-name --filter-pattern "ERROR"
CloudWatch Insights
aws logs start-query \
--log-group-name /aws/lambda/function-name \
--start-time $(date -d '1 hour ago' +%s) \
--end-time $(date +%s) \
--query-string '
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 50
'
aws logs get-query-results --query-id <query-id>
Common Patterns
Error Aggregation
grep "ERROR" app.log | sort | uniq -c | sort -rn | head -20
grep "ERROR" app.log | awk '{print $1, $2}' | cut -d: -f1 | uniq -c
Response Time Analysis
grep -oP 'response_time=\K\d+' app.log | \
awk '{sum+=$1; count++} END {print "avg:", sum/count, "count:", count}'
grep -P 'response_time=\d{4,}' app.log
Status Code Analysis
grep -oP 'status=\K\d+' app.log | sort | uniq -c | sort -rn
grep -P 'status=5\d\d' app.log
IP/User Analysis
grep -oP '\d+\.\d+\.\d+\.\d+' access.log | sort | uniq -c | sort -rn | head -10
grep -oP 'user=\K\S+' app.log | sort | uniq -c | sort -rn
Correlation Techniques
By Request ID
grep "request_id=abc123" *.log
kubectl logs -l app=myapp --all-containers | grep "request_id=abc123"
By Timestamp
awk '/2024-01-15 10:30:4/,/2024-01-15 10:30:5/' app.log
Across Services
for service in api worker database; do
echo "=== $service ==="
grep "order_id=12345" /var/log/$service.log
done
Log Formats
Apache/Nginx Access Logs
awk '{print $9}' access.log | sort | uniq -c | sort -rn
awk '{print $NF}' access.log | sort -n | tail -20
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -10
Syslog
grep "sshd" /var/log/syslog
grep "Failed password" /var/log/auth.log
grep -E "(error|crit|alert|emerg)" /var/log/syslog
Quick Reference
grep "$(date '+%Y-%m-%d %H')" app.log | grep -i error
grep -i error app.log | sort | uniq -c | sort -rn | head -10
cat logs.jsonl | jq 'select(.level=="error") | "\(.timestamp) \(.message)"'
kubectl logs -l app=myapp --all-containers --since=1h | grep -i error
aws logs tail /aws/lambda/func --since 1h --filter-pattern "ERROR"
Related Skills
- k8s-debug: For Kubernetes-specific log analysis
- docker-ops: For Docker log management
- incident-response: For correlating logs during incidents