Fluent bit – это легковесная служба обработки и пересылки логов с открытым исходным кодом.
Fluent bit позволяет собирать логи, события или метрики из разных источников и обрабатывать их.
Затем эти данные могут быть доставлены в различные серверные части, такие как Elastic search, Splunk, Kafka, Data dog, InfluxDB или New Relic.
Fluent Bit прост в установке и настройке.
Он дает вам полный контроль над тем, какие данные нужно собирать, анализируя их, чтобы обеспечить структуру собранных данных.
Он позволяет удалить ненужные данные, отфильтровать данные и отправить их по назначению вывода.
Таким образом, он обеспечивает комплексное решение для сбора данных.
Содержание
- Некоторые замечательные особенности Fluent bit :
- Необходимые условия
- Развернем Elasticsearch
- Шаг 1. Разверните служебную учетную запись, роль и привязку роли
- Шаг 2. Разверните Fluent Bit configMap
- Шаг 3. Создайте Persistent Volume Claim
- Шаг 4. Разверните deployment Kubernetes, используя configmap
- Шаг 5. Разверните приложение
Некоторые замечательные особенности Fluent bit :
- Высокая производительность
- Он очень легкий и быстрый, требует меньше ресурсов и памяти.
- Он поддерживает несколько форматов данных.
- Файл конфигурации для Fluent Bit очень легко понять и изменить.
- Fluent Bit имеет встроенную поддержку TLS / SSL. Связь с местом назначения вывода защищена.
- Асинхронный ввод / вывод
Fluent Bit совместим с Docker и K8s и и поэтому может использоваться для агрегирования логов приложений.
Есть несколько способов войти в kubernetes.
Один из способов – это стандартные логи stdout, которые записываются по пути хоста «/var/log/ container» на нодах кластера.
Этот метод требует, чтобы был развернут DaemonSet.
Демонсеты развертывают контейнер на каждом узле кластера.
Необходимые условия
Во-первых, нам нужен работающий кластер Kubernetes.
Вы можете использовать наши руководства, показанные ниже, чтобы настроить его, если у вас его еще нет:
- ☸️ Разверните готовый кластер Kubernetes с помощью Ansible & Kubespray
- Установка производственного кластера Kubernetes с Rancher RKE
Развернем Elasticsearch
Создайте манифест.
Это развертывание предполагает, что в нашем кластере есть класс хранилища 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