log-pilot собирает логи k8s
На данный момент наш ELK развернут. Далее мы развернем log-pilot, который будет собирать журналы контейнера и отправлять их в logstash. Logstahs обрабатывает журналы и отправляет их в es. Ниже приводится краткое описание лог-лоцман
Запущенная служба контейнера, настроив тег, будет проанализирована log-pilot для получения журнала контейнера.
характеристика
Log-Pilot имеет механизм автоматического обнаружения: после того, как контейнер настроен с помощью тега, он будет обнаружен компонентом сбора. Механизм сохранения дескриптора контрольной точки: отслеживание дескриптора файла журнала Автоматическая маркировка данных журнала: при добавлении тега в контейнер тег будет записан в журнал, и данные можно будет отличить по этому тегу при извлечении журнала. Эффективно справляться с динамической конфигурацией: ее можно автоматически обрабатывать, когда контейнер расширяется или сжимается. Такие проблемы, как дублирование и потеря журналов, а также теги источников журналов: реализуются путем сохранения дескрипторов.
lable
aliyun.logs.$name = $path
Имя переменной является именем журнала и может содержать только 0~9, a~z, A~Z и дефис (-)
Переменный путь — это путь к журналу, который необходимо собрать, и он должен относиться к файлу, а не только к каталогу. В части имени файла можно использовать подстановочные знаки, например, /var/log/he.log и /var/log/*.log являются правильными значениями, но не /var/log, вы не можете просто писать в каталог . stdout — это специальное значение, представляющее стандартный вывод.
aliyun.logs.$name.format: формат журнала, в настоящее время поддерживает следующие форматы нет: неформатированный обычный текст json: формат json, одна полная строка json в строке csv: формат csv
aliyun.logs.$name.tags: при составлении отчетов добавляются дополнительные поля в формате k1=v1,k2=v2, а каждое значение ключа разделяется запятой, например aliyun.logs.access.tags=" name =hello,stage=test", поле имени и поле этапа появятся в журнале, переданном в хранилище Если в качестве хранилища логов используется ElasticSearch, тег target имеет особое значение, указывающее на соответствующий индекс в ElasticSearch.
использовать
- Настройте демонский набор log-pilot для публикации на k8s, чтобы каждый узел имел компонент сбора
- Чтобы добавить метку в собираемый контейнер Docker, нужно использовать ключ, как добавить этот тег.
PILOT_LOG_PREFIX: "aliyun,custom" Префикс лейбла можно изменить, изменив эту переменную среды.По умолчанию - aliyun (некоторые версии не применимы)
docker pull log-pilot:0.9.6-filebeat
развернуть yaml
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: log-pilot
namespace: kube-system
labels:
k8s-app: log-pilot
kubernetes.io/cluster-service: "true"
spec:
template:
metadata:
labels:
k8s-app: log-es
kubernetes.io/cluster-service: "true"
version: v1.22
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
serviceAccountName: dashboard-admin
containers:
- name: log-pilot
# 版本请参考https://github.com/AliyunContainerService/log-pilot/releases
image: log-pilot:latest
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
env:
- name: "NODE_NAME"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "LOGGING_OUTPUT"
value: "logstash"
- name: "LOGSTASH_HOST"
value: "10.90.x.x"
- name: "LOGSTASH_PORT"
value: "5044"
- name: "LOGSTASH_LOADBALANCE"
value: "true"
#- name: "FILEBEAT_OUTPUT"
# value: "elasticsearch"
#- name: "ELASTICSEARCH_HOST"
# value: "elasticsearch"
#- name: "ELASTICSEARCH_PORT"
# value: "9200"
#- name: "ELASTICSEARCH_USER"
# value: "elastic"
#- name: "ELASTICSEARCH_PASSWORD"
# value: "changeme"
volumeMounts:
- name: sock
mountPath: /var/run/docker.sock
- name: root
mountPath: /host
readOnly: true
- name: varlib
mountPath: /var/lib/filebeat
- name: varlog
mountPath: /var/log/filebeat
securityContext:
capabilities:
add:
- SYS_ADMIN
terminationGracePeriodSeconds: 30
volumes:
- name: sock
hostPath:
path: /var/run/docker.sock
- name: root
hostPath:
path: /
- name: varlib
hostPath:
path: /var/lib/filebeat
type: DirectoryOrCreate
- name: varlog
hostPath:
path: /var/log/filebeat
type: DirectoryOrCreate
развертывание вводит конфигурацию переменной среды, предполагая, что имя приложения называется monitor-center
- name: aliyun_logs_monitor-center-stdout
# 采集控制台
value: "stdout"
- name: aliyun_logs_monitor-center-tomcat
# 采集指定目录
value: "/usr/local/tomcat/logs/*.log"
- name: aliyun_logs_monitor-center-netcore
# 采集指定目录
value: "/app/logs/*.log"
- name: aliyun_logs_monitor-center-java
# 采集指定目录
value: "/logs/*.log"
- name: aliyun_logs_monitor-center-stdout_tags
# 为 aliyun_logs_monitor-center-stdout 采集 控制台 配置打上标签,下面类似
value: "app=monitor-center,lang=all,sourceType=stdout"
- name: aliyun_logs_monitor-center-tomcat_tags
value: "app=monitor-center,lang=java,sourceType=log"
- name: aliyun_logs_monitor-center-netcore_tags
value: "app=monitor-center,lang=net,sourceType=log"
- name: aliyun_logs_monitor-center-java_tags
value: "app=monitor-center,lang=java,sourceType=log"
Проверьте правильность конфигурации файла
kubectl -n kube-system get pod | grep log-pilot
kubectl exec -it log-pilot-nspdv sh -n kube-system
cat /etc/filebeat/filebeat.yml
Другие точки знаний
Общие компоненты сбора журналов
- filebeat
- Logstash
- logpilot
- fluentd
ElasticSearch Curator
Это инструмент, разработанный Python, который может работать более удобно без прямой отправки HTTP-запросов. Однако этот инструмент устарел в более высоких версиях, es7.X, пожалуйста, изучите использование жизненного цикла напрямую.
elastalert
es плагин расширения. Можно обрабатывать определенные журналы сопоставления и генерировать сигналы тревоги.
Elastic Beats
Beats означает облегченный и является исходным сервисом для получения данных, это могут быть файлы журналов (Filebeat), сетевые данные (Packetbeat) и метрики сервера (Metricbeat).
Итак, сообщество придумало концепцию ELKB, и мы используем log-pilot для сбора данных контейнера, что собственно и является идеей ELKB.
https://www.cnblogs.com/sanduzxcvbnm/p/12076383.html
О типе
Версия 5.x может создавать несколько типов Версия 6.x может создавать только один тип версия 7.x удаленный тип
es основан на индексном индексе и не требует передачи типа (таблица в реляционной базе данных) для повышения скорости запросов.
О узле
Мастер-узел, узел данных, узел предварительной обработки (узел-координатор). Тип узла может быть указан отображением.По умолчанию он действует как множество функций.Выбран основной узел. Мастер-узел отвечает за синхронизацию состояния кластера, а узел-координатор отвечает за пересылку запросов.Если узел-координатор также участвует в обработке данных, нагрузка на узел-координатор слишком высока и запрос не может быть перенаправлен, что может повлиять на общая производительность. При крупномасштабных узлах, таких как более 10 узлов, каждый узел может иметь выделенную ответственность.Поскольку узлам предварительной обработки не нужно хранить данные, требования к памяти ЦП не очень высоки.
Лучше всего использовать балансировку нагрузки nginx, опрашивая узлы для обработки запросов, а не отправлять запросы на узел каждый раз
О перебалансировке узлов
Внезапный сбой не обязательно должен запускать перебалансировку кластера, вы можете закрыть его или установить время задержки запуска.
Об автоматическом создании индекса
Если автоматическое создание индекса не допускается, то когда ELK нажимает журналы к ES, его нельзя увидеть на переднем конце, а индексы должны быть созданы вручную. Эта функция может быть включена и выключена путем изменения конфигурации
куча по умолчанию
es Максимальный и минимальный размер кучи по умолчанию составляет 2 ГБ, поэтому, если он предназначен для тестирования, когда куча неизвестна, он может не импортировать докер, поскольку значение по умолчанию слишком велико.
Модификация Docker ES
Если вы хотите настроить параметры ES jvm, шаги
- Сначала закройте контейнер, rm контейнер
- Измените файл конфигурации и аннотируйте примечания, связанные с безопасностью, иначе контейнер не запустится.
- Измените jvm, чтобы снова запустить контейнер.
- Скопируйте файлы, связанные с ключевыми словами, в контейнер
- Изменить файл конфигурации раскомментировать
- перезапустить контейнер
Из-за использования проверки безопасности файл с ключевыми словами исчезает после уничтожения контейнера, и плагин тоже исчезает.
Затем сохраненные данные сопоставляются с локальными, не беспокойтесь об этом, когда кластер потеряет узел, индекс будет перебалансирован на другие узлы, а когда кластер добавит узлы, данные снова будут перебалансированы. Данные, хранящиеся локально, недействительны при сбое ноды, а нода пересоединяет данные и записывает новые.Короче говоря, в режиме докера вам не нужно уделять слишком много внимания файлам данных
Вышеупомянутый способ - это собственно переразвертывание.Еще один способ - нестандартная работа.Уничтожать контейнер не нужно,но он не стабилен.Рекомендуется планировать jvm с самого начала. Если вам нужно изменить его, сначала используйте нестандартные операции, то есть измените файлы в контейнере докера, что немного сложно. Таким образом, данные все еще существуют.Если есть много узлов кластера и есть резервные копии реплик, контейнер можно уничтожить напрямую, чтобы данные не были потеряны.
Сводка проблем
Запишите общие решения проблем
search.max_buckets — слишком маленькое исключение
trying to create too many buckets. must be less than or equal to: [100000] but was [100001]. this limit can be set by changing the [search.max_buckets] cluster level setting.
Вышеупомянутая ошибка возникает, это может быть проблема с настройкой search.max_buckets, используйте переходный процесс для временного изменения
curl -H 'Content-Type: application/json' ip:port/_setting/cluster -d '{
"transient": {
"search.max_buckets": 217483647
}
}'
Через кибану постоянная конфигурация является постоянной.
PUT /_cluster/settings
{
"persistent": {
"search.max_buckets": 217483647
}
}
Или напрямую изменить файл конфигурации
Официальная ссылка https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket.html
Количество осколков слишком мало
Количество шардов нужно скорректировать.Количество шардов по умолчанию в 7.5 2000. При превышении этого значения кластер не может создавать шарды.Через кибану постоянная - это постоянная конфигурация, а временная - временная.
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"max_shards_per_node":10000
}
}
}
Нить записи слишком мала
Перезапустите после изменения файла конфигурации и изменения размера потока записи: thread_pool.write.queue_size: 1000
Изменить запись значения возврата по умолчанию
index.max_result_window: 1000000 по умолчанию может возвращать только 10000, возможно, цепочка вызовов слишком длинная, вам нужно изменить эту конфигурацию (прогулки по небу)
Справочник по архитектуре ELK https://www.one-tab.com/page/tto_XdDeQlS44BY-ziLvKg Сборка ELK https://www.one-tab.com/page/Fb3B3qd2Q9yR9W92dZ2pYQ