الفصل 11.2 - إدارة السجلات
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم إدارة السجلات في Kubernetes
- استخدام kubectl لعرض السجلات
- توحيد السجلات باستخدام EFK/Loki
- تكوين Fluentd/Fluent Bit
- تحليل السجلات باستخدام Kibana/Grafana
- تنفيذ تدوير السجلات
مقدمة
السجلات ضرورية لتصحيح الأخطاء والمراقبة. في Kubernetes، تُدار السجلات على مستوى الحاويات ويجب توحيدها لتحليل فعال.
السجلات باستخدام kubectl
عرض سجلات Pod
# سجلات Pod
kubectl logs my-pod
# سجلات حاوية معينة
kubectl logs my-pod -c my-container
# سجلات جميع الحاويات
kubectl logs my-pod --all-containers=true
# سجلات مع المتابعة (البث)
kubectl logs -f my-pod
# السجلات السابقة (إذا تم إعادة تشغيل Pod)
kubectl logs my-pod --previous
# سجلات مع الطابع الزمني
kubectl logs my-pod --timestamps
# تحديد عدد الأسطر
kubectl logs my-pod --tail=100
# سجلات منذ تاريخ معين
kubectl logs my-pod --since=1h
سجلات لعدة Pods
# سجلات جميع Pods مع تسمية
kubectl logs -l app=my-app
# سجلات Deployment
kubectl logs deployment/my-app
# سجلات StatefulSet
kubectl logs statefulset/my-app
توحيد السجلات
EFK Stack (Elasticsearch, Fluentd, Kibana)
الهيكلية:
- Fluentd: يجمع ويرسل السجلات
- Elasticsearch: يخزن السجلات
- Kibana: يعرض ويبحث في السجلات
Loki Stack (Loki, Grafana)
الهيكلية:
- Fluent Bit: يجمع السجلات
- Loki: يخزن السجلات (مثل Prometheus للسجلات)
- Grafana: يعرض السجلات
تثبيت EFK Stack
عبر Helm
# إضافة المستودع
helm repo add elastic https://helm.elastic.co
helm repo update
# تثبيت Elasticsearch
helm install elasticsearch elastic/elasticsearch \
--namespace logging \
--create-namespace
# تثبيت Fluentd
helm install fluentd fluent/fluentd \
--namespace logging
# تثبيت Kibana
helm install kibana elastic/kibana \
--namespace logging
تكوين Fluentd
DaemonSet Fluentd
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: logging
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.logging.svc.cluster.local"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
تثبيت Loki Stack
عبر Helm
# إضافة المستودع
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# تثبيت Loki
helm install loki grafana/loki-stack \
--namespace logging \
--create-namespace
تكوين Fluent Bit
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
namespace: logging
data:
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
[INPUT]
Name tail
Path /var/log/containers/*.log
Parser docker
Tag kube.*
Refresh_Interval 5
[OUTPUT]
Name loki
Match kube.*
Host loki.logging.svc.cluster.local
Port 3100
Labels job=fluentbit
التحليل باستخدام Kibana
الوصول
# Port-forward
kubectl port-forward -n logging svc/kibana-kibana 5601:5601
البحث في السجلات
Kibana Query Language (KQL):
kubernetes.namespace: "production" AND level: "error"
Lucene:
kubernetes.namespace:production AND level:error
التحليل باستخدام Grafana
الوصول
# Port-forward
kubectl port-forward -n logging svc/loki-grafana 3000:80
LogQL (Loki Query Language)
# سجلات namespace
{namespace="production"}
# سجلات مع أخطاء
{namespace="production"} |= "error"
# معدل السجلات في الثانية
rate({namespace="production"}[5m])
أفضل الممارسات
1. التوحيد
توحيد جميع السجلات في نظام واحد.
2. التدوير
تكوين تدوير السجلات لتجنب استنفاد التخزين.
3. الفهرسة
فهرسة السجلات للبحث السريع.
4. الاحتفاظ
تحديد سياسة احتفاظ مناسبة.
5. التحليل
تحليل السجلات المهيكلة (JSON) لتحسين البحث.
ملخص
في هذا الفصل، تعلمت:
kubectl logs: عرض سجلات الـ Pods
التوحيد: EFK Stack أو Loki Stack
Fluentd/Fluent Bit: جمع السجلات
Elasticsearch: تخزين وبحث
Loki: تخزين خفيف للسجلات
Kibana/Grafana: تصور وتحليل
أفضل الممارسات: التوحيد، التدوير، الفهرسة، الاحتفاظ
الخطوات التالية
الفصل 11.3: التنبيه
الفصل 11.4: التتبع الموزع
المختبر 11.3: تكوين السجلات
تم إنشاء الفصل في: ديسمبر 2024