Технический блог:GitHub.com/Делайте это с душой/Особые…
В то же время, вы также можете обратить внимание на мой публичный аккаунт WeChat.AlwaysBeta, вас ждет еще больше захватывающего контента.
Предыдущая статья представилаКак изящно войти в Django, в этой статье речь пойдет о том, как управлять и просматривать журналы.
Говоря о просмотре журналов, стоит ли писать статью о такой простой вещи? Файл уже существует, и он будет закрыт, если вы откроете vim напрямую. При этом бывают случаи, когда это просто не работает.
Если это один сервер, также можно напрямую просматривать локальные файлы, а с помощью некоторых команд Linux вы можете быстро найти проблему. Но на самом деле большинство наших сервисов развернуто на нескольких серверах, если произойдет сбой, то на каком сервере проблема? Устранить неполадки сложно, вы можете заходить на сервер только по одному для просмотра логов, что слишком неэффективно.
Следовательно, должно быть централизованное место управления журналами, которое может объединять журналы на нескольких серверах вместе. Таким образом, если есть ошибка, мы можем проверить платформу централизованного управления журналом, мы можем быстро найти проблему и мы можем точно знать, на каком сервере возникла проблема, почему бы не сделать это?
Эта статья предназначена в основном для решения этой проблемы.
Как это решить? Легко сказать, потому что уже есть очень зрелый фреймворк для анализа логов под названием ELK, и он имеет успешную практику применения в крупных интернет-компаниях, и материалов в сети очень много.
Так как в компании уже есть набор фреймворков для анализа логов, то для меня это дело проще, нужно просто отправить содержимое лога.
Здесь я использовал не Logstash, а более легкий Filebeat, который удобнее настраивать.
Конфигурация источника журнала Filebeat:
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /log/error.log
# 这三行可以将 json 内容解析成键值对的形式,否则会将全部 json 内容放到一个 message 字段里
json.keys_under_root: true
json.add_error_key: true
json.overwrite_keys: true
Filebeat отправляет в Elasticsearch:
#==================== Elasticsearch template setting ==========================
setup.template.name: "weblog"
setup.template.pattern: "weblog_*"
setup.template.overwrite: false
setup.template.enabled: true
setup.template.settings:
index.number_of_shards: 1
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: ["127.0.0.1:9200"]
# 按月建索引
index: "weblog_%{+YYYY.MM}"
# Protocol - either `http` (default) or `https`.
# protocol: "https"
# Authentication credentials - either API key or username/password.
# api_key: "id:api_key"
username: "elastic"
password: "changeme"
Возникла проблема при отправке конфигурации в Elasticsearch, долго решали, проблема в следующем:
(status=404): {"type":"type_missing_exception","reason":"type[doc] missing","index_uuid":"j9yKwou6QDqwEdhn4ZfYmQ","index":"secops-seclog_2020.04.16","caused_by":{"type":"illegal_state_exception","reason":"trying to auto create mapping, but dynamic mapping is disabled"}}
Ищу информацию в Интернете, большинство приведенных решений являются конфигурационнымиdocument_type
, но я использую Filebeat версии 5.6, этот параметр был отменен, но я могу найти только другой способ.
Наконец, когда я собирался сдаться, изменив тип шаблона Elasticsearch наdoc
, вместо использования настраиваемого поля, решил проблему.
И я обнаружил очень странное явление, то есть всегда можно найти решение проблемы, когда уже собираешься сдаться, поэтому надо больше упорствовать.
После отправки в Elasticsearch данные можно запросить со страницы через Kibana, но это не лучший способ. Более общая архитектура заключается в том, чтобы сначала отправить данные на шину данных Kafka, затем использовать данные в Kafka через программу-потребитель и, наконец, сохранить их в Elasticsearch или других компонентах хранилища.
Filebeat отправляет Kafka:
output.kafka:
hosts: ["kafka1:9092"]
topic: 'web-log'
username: 'XXX'
password: 'XXX'
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
Удалите ненужные поля:
Когда Filebeat отправляет журналы, он добавит несколько полей. Если вам не нужны эти поля, вы можете отфильтровать эти поля с помощью следующей конфигурации.
#================================ Processors =====================================
# Configure processors to enhance or manipulate events generated by the beat.
processors:
- drop_fields:
fields: ["agent", "ecs", "host", "input", "log"]
# - add_host_metadata: ~
# - add_cloud_metadata: ~
# - add_docker_metadata: ~
# - add_kubernetes_metadata: ~
Выше приведена вся конфигурация Filebeat.Если вы хотите использовать все компоненты ELK в производственной среде, предполагается, что вам все еще нужно полагаться на базовую платформу больших данных компании, а также длительный процесс создания, развертывания , тестируйте и оптимизируйте. У меня нет большого опыта в этой области. , нет возможности углубиться.
Но если вы хотите создать набор тестов и играть самостоятельно, это относительно просто: вы можете напрямую запросить соответствующие документы на официальном сайте, и настройка относительно проста. Если скорость сети высокая, она должна быть быстрой, желаю вам счастливой игры.
выше.
Справочная документация: