☸️ Проброс логов Kubernetes в Elasticsearch (ELK) с помощью Fluentbit |

☸️ Проброс логов Kubernetes в Elasticsearch (ELK) с помощью Fluentbit

Мануал

Fluent bit – это легковесная служба обработки и пересылки логов с открытым исходным кодом.

Fluent bit позволяет собирать логи, события или метрики из разных источников и обрабатывать их.

Затем эти данные могут быть доставлены в различные серверные части, такие как Elastic search, Splunk, Kafka, Data dog, InfluxDB или New Relic.

Fluent Bit прост в установке и настройке.

Он дает вам полный контроль над тем, какие данные нужно собирать, анализируя их, чтобы обеспечить структуру собранных данных.

Он позволяет удалить ненужные данные, отфильтровать данные и отправить их по назначению вывода.

Таким образом, он обеспечивает комплексное решение для сбора данных.

Некоторые замечательные особенности Fluent bit :

  • Высокая производительность
  • Он очень легкий и быстрый, требует меньше ресурсов и памяти.
  • Он поддерживает несколько форматов данных.
  • Файл конфигурации для Fluent Bit очень легко понять и изменить.
  • Fluent Bit имеет встроенную поддержку TLS / SSL. Связь с местом назначения вывода защищена.
  • Асинхронный ввод / вывод
Fluent Bit совместим с Docker и K8s и и поэтому может использоваться для агрегирования логов приложений.
Есть несколько способов войти в kubernetes.
Один из способов – это стандартные логи stdout, которые записываются по пути хоста «/var/log/ container» на нодах кластера.
Этот метод требует, чтобы был развернут DaemonSet.
Демонсеты развертывают контейнер на каждом узле кластера.

Необходимые условия

Во-первых, нам нужен работающий кластер Kubernetes.
Вы можете использовать наши руководства, показанные ниже, чтобы настроить его, если у вас его еще нет:
Создайте манифест.
Это развертывание предполагает, что в нашем кластере есть класс хранилища cephfs.
Постоянный том будет создан вместе с stateful set.
Измените эту конфигурацию в соответствии с вашими потребностями.
$ vim elasticsearch-ss.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es-cluster 
spec:
  serviceName: elasticsearch
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
        resources:
            limits:
              cpu: 1000m
            requests:
              cpu: 100m
        ports:
        - containerPort: 9200
          name: rest
          protocol: TCP
        - containerPort: 9300
          name: inter-node
          protocol: TCP
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data
        env:
          - name: cluster.name
            value: k8s-logs
          - name: node.name
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: discovery.seed_hosts
            value: "es-cluster-0.elasticsearch"
          - name: cluster.initial_master_nodes
            value: "es-cluster-0"
          - name: ES_JAVA_OPTS
            value: "-Xms512m -Xmx512m"
      initContainers:
      - name: fix-permissions
        image: busybox
        command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data
      - name: increase-vm-max-map
        image: busybox
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      - name: increase-fd-ulimit
        image: busybox
        command: ["sh", "-c", "ulimit -n 65536"]
        securityContext:
          privileged: true
  volumeClaimTemplates:
  - metadata:
      name: data
      labels:
        app: elasticsearch
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: cephfs
      resources:
        requests:
          storage: 5Gi
$ vim kibana.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.2.0
        resources:
          limits:
            cpu: 1000m
          requests:
            cpu: 100m
        env:
          - name: ELASTICSEARCH_URL
            value: http://elasticsearch:9200
        ports:
        - containerPort: 5601

---
apiVersion: v1
kind: Service
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  ports:
  - port: 5601
  selector:
    app: kibana

Применим эту конфигурацию:

$ kubectl apply -f kibana.yaml
4. Затем нам нужно настроить ingress для службы Kibana следующим образом:
$ vim kibana-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/tls-acme: "true"
    ingress.kubernetes.io/force-ssl-redirect: "true"
  name: kibana

spec:
  rules:
  - host: kibana.itsecforu.ru
    http:
      paths:
      - backend:
          serviceName: kibana
          servicePort: 5601
        path: /
  tls:
  - hosts:
    - kibana.itsecforu.ru
    secretName: ingress-secret   // This can be created prior if using custom certs
$ kubectl apply -f kibana-ingress.yaml 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий