Elasticsearch on K8S 开启慢日志

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文档指导如何在Elasticsearch on PaaS环境中手动配置慢日志。首先通过API设置索引的慢日志阈值,接着创建`log4j2.properties`的ConfigMap以定义日志滚动策略,并修改Elasticsearch配置引入此ConfigMap。最后,通过Kubernetes命令检查Pod内的`logs`目录以查看生成的慢日志文件。需注意,不当配置可能会影响系统性能。[官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/logging.html)提供更多细节。

如果想要查看索引的慢日志,ES on PaaS中需要开启log4j配置,本文档主要说明如何手动修改ES配置加载log4j配置文件实现开启慢日志。
备注:官方文档参考 https://www.elastic.co/guide/en/elasticsearch/reference/6.8/logging.html

步骤:
1、ES开启慢日志配置
2、创建log4j2.properties的configmap配置文件
3、修改ES配置,添加log4j2的volumeMounts配置,触发ES重启
4、查看pod中,logs目录下的慢日志文件

详细操作:
1、ES开启慢日志配置
官方文档参考:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/index-modules-slowlog.html

(1) 开启单个索引的慢日志配置,可根据需要调整慢日志的时间:


PUT /twitter/_settings
{
   
    "index.search.slowlog.threshold.query.warn": "10s",
    "index.search.slowlog.threshold.query.info": "5s",
    "index.search.slowlog.threshold.query.debug": "2s",
    "index.search.slowlog.threshold.query.trace": "500ms",
    "index.search.slowlog.threshold.fetch.warn": "1s",
    "index.search.slowlog.threshold.fetch.info": "800ms",
    "index.search.slowlog.threshold.fetch.debug": "500ms",
    "index.search.slowlog.threshold.fetch.trace": "200ms",
    "index.search.slowlog.level": "debug",
    "index.indexing.slowlog.threshold.index.warn": "10s",
    "index.indexing.slowlog.threshold.index.info": "5s",
    "index.indexing.slowlog.threshold.index.debug": "2s",
    "index.indexing.slowlog.threshold.index.trace": "500ms",
    "index.indexing.slowlog.level": "debug",
    "index.indexing.slowlog.source": "1000"
}

2、创建log4j2.properties的configmap配置文件
创建log4j2的configmap配置文件,其中关于日志的级别和清理规则可以自定义,namespace的名字要和ES实例的namespace保持一致,不然找不到configmap。
(注意,每个值的后面不要有空格,不然加载到ES中配置不生效)

执行 kubectl apply -f log4j2.yml


apiVersion: v1
kind: ConfigMap
metadata:
  name: log4j2
  namespace: xxx-test
data:
  log4j2.properties: |
    appender.index_search_slowlog_rolling.type = RollingFile
    appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
    appender.index_search_slowlog_rolling.fileName =         ${
   sys:es.logs.base_path}${
   sys:file.separator}${
   sys:es.logs.cluster_name}_index_search_slowlog.log
    appender.index_search_slowlog_rolling.layout.type = PatternLayout
    appender.index_search_slowlog_rolling.layout.pattern = [%d{
   ISO8601}][%-5p][%-25c{
   1.}] [%node_name]%marker %.-10000m%n
    appender.index_search_slowlog_rolling.filePattern = ${
   sys:es.logs.base_path}${
   sys:file.separator}${
   sys:es.logs.cluster_name}_index_search_slowlog-%d{
   yyyy-MM-dd}-%i.log.gz
    appender.index_search_slowlog_rolling.policies.type = Policies
    appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
    appender.index_search_slowlog_rolling.policies.time.interval = 1
    appender.index_search_slowlog_rolling.policies.time.modulate = true
    appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy
    appender.index_search_slowlog_rolling.policies.size.size = 256MB
    appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy
    appender.index_search_slowlog_rolling.strategy.fileIndex = nomax
    appender.index_search_slowlog_rolling.strategy.action.type = Delete
    appender.index_search_slowlog_rolling.strategy.action.basepath = ${
   sys:es.logs.base_path}${
   sys:file.separator}
    appender.index_search_slowlog_rolling.strategy.action.condition.type = IfFileName
    appender.index_search_slowlog_rolling.strategy.action.condition.glob = ${
   sys:es.logs.cluster_name}_*
    appender.index_search_slowlog_rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
    appender.index_search_slowlog_rolling.strategy.action.condition.nested_condition.exceeds = 2GB
    logger.index_search_slowlog_rolling.name = index.search.slowlog
    logger.index_search_slowlog_rolling.level = debug
    logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
    logger.index_search_slowlog_rolling.additivity = false
    appender.index_indexing_slowlog_rolling.type = RollingFile
    appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
    appender.index_indexing_slowlog_rolling.fileName = ${
   sys:es.logs.base_path}${
   sys:file.separator}${
   sys:es.logs.cluster_name}_index_indexing_slowlog.log
    appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
    appender.index_indexing_slowlog_rolling.layout.pattern = [%d{
   ISO8601}][%-5p][%-25c{
   1.}] [%node_name]%marker %.-10000m%n
    appender.index_indexing_slowlog_rolling.filePattern = ${
   sys:es.logs.base_path}${
   sys:file.separator}${
   sys:es.logs.cluster_name}_index_indexing_slowlog-%d{
   yyyy-MM-dd}-%i.log.gz
    appender.index_indexing_slowlog_rolling.policies.type = Policies
    appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
    appender.index_indexing_slowlog_rolling.policies.time.interval = 1
    appender.index_indexing_slowlog_rolling.policies.time.modulate = true
    appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy
    appender.index_indexing_slowlog_rolling.policies.size.size = 256MB
    appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy
    appender.index_indexing_slowlog_rolling.strategy.fileIndex = nomax
    appender.index_indexing_slowlog_rolling.strategy.action.type = Delete
    appender.index_indexing_slowlog_rolling.strategy.action.basepath = ${
   sys:es.logs.base_path}${
   sys:file.separator}
    appender.index_indexing_slowlog_rolling.strategy.action.condition.type = IfFileName
    appender.index_indexing_slowlog_rolling.strategy.action.condition.glob = ${
   sys:es.logs.cluster_name}_*
    appender.index_indexing_slowlog_rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
    appender.index_indexing_slowlog_rolling.strategy.action.condition.nested_condition.exceeds = 2GB
    logger.index_indexing_slowlog.name = index.indexing.slowlog.index
    logger.index_indexing_slowlog.level = debug
    logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
    logger.index_indexing_slowlog.additivity = false

3、修改ES配置,添加log4j2的volumeMounts配置
kubectl get es -A
kubectl edit es esxxx -n xxx
datamaster的dataVolumeClaim同级目录下添加如下内容:
(备注:如果是粘贴复制方式,先执行:set paste , 再黏贴,这样可以避免空格的影响

podTemplate:
  spec:
    containers:
    - name: es
      volumeMounts:
      - name: log4j2
        mountPath: /usr/share/elasticsearch/config/log4j2.properties
        subPath: log4j2.properties
    volumes:
    - name: log4j2
      configMap:
        name: log4j2

image.png

image.png

保存更改后,注意查看ES的rolling状态
kubect get es -A

4、查看pod中,logs目录下的慢日志文件
kubectl exec -it es01-data-0 -n xxx-test bash

image.png

注意:Elasticsearch默认关闭慢日志,开启可能会对性能造成影响。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
9天前
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
44 6
|
1月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
176 4
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
110 3
|
6天前
|
存储 运维 监控
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
|
1月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
2月前
|
消息中间件 Kubernetes API
在K8S中,如何收集k8s集群日志?
在K8S中,如何收集k8s集群日志?
|
1月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
190 0
|
2月前
|
消息中间件 Kubernetes Kafka
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
|
2月前
|
Kubernetes Shell 网络安全
【Azure K8S】记录AKS VMSS实例日志收集方式
【Azure K8S】记录AKS VMSS实例日志收集方式
|
2月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?

相关产品

  • 检索分析服务 Elasticsearch版