微服务中的日志管理中间件的使用和管理

日志管理是系统运维和开发过程中非常重要的一环。它帮助我们监控系统的运行状态、排查问题、分析性能等。常用的日志管理中间件包括 ELK Stack (Elasticsearch, Logstash, Kibana)、EFK Stack (Elasticsearch, Fluentd, Kibana)、Graylog 等。下面我们将详细介绍如何使用和管理 ELK Stack

ELK Stack 简介

  • Elasticsearch: 一个分布式的搜索和分析引擎,用于存储和检索大量数据。
  • Logstash: 一个开源的数据收集引擎,负责从各种来源收集日志数据并进行处理,然后将其发送到 Elasticsearch。
  • Kibana: 一个开源的分析和可视化平台,用于探索和可视化存储在 Elasticsearch 中的数据。

安装和配置 ELK Stack

1. 安装 Java

Elasticsearch 和 Logstash 都需要 Java 运行时环境 (JRE) 或 Java 开发工具包 (JDK)。

bash

bash 复制代码
sudo apt update
sudo apt install default-jdk -y

验证安装:

bash

bash 复制代码
java -version
2. 安装 Elasticsearch

bash

bash 复制代码
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elasticsearch.list'
sudo apt-get update && sudo apt-get install elasticsearch -y
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

编辑 Elasticsearch 配置文件 /etc/elasticsearch/elasticsearch.yml

Yaml

bash 复制代码
network.host: 0.0.0.0
discovery.type: single-node

重启 Elasticsearch:

bash

bash 复制代码
sudo systemctl restart elasticsearch

验证 Elasticsearch 是否正常运行:

bash

bash 复制代码
curl -X GET "localhost:9200/"
3. 安装 Logstash

bash

bash 复制代码
sudo apt-get install logstash -y

创建一个 Logstash 配置文件 /etc/logstash/conf.d/logstash.conf

conf

bash 复制代码
input {
    file {
        path => "/var/log/*.log"
        start_position => beginning
    }
}

filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
        match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
}

output {
    elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
    }
}

启动 Logstash:

bash

bash 复制代码
sudo systemctl start logstash
sudo systemctl enable logstash
4. 安装 Kibana

bash

bash 复制代码
sudo apt-get install kibana -y

Yaml

bash 复制代码
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

启动 Kibana:

bash

bash 复制代码
sudo systemctl start kibana
sudo systemctl enable kibana

访问 http://your_kibana_server_ip_or_domain:5601 可以看到 Kibana 的界面。

使用和管理 ELK Stack

1. 收集日志

Logstash 可以从多种来源收集日志,包括文件、系统日志、消息队列等。你可以根据需要配置不同的 input 插件。

例如,收集 Docker 容器的日志:

conf

bash 复制代码
input {
    docker {
        host => "unix:///var/run/docker.sock"
        tags => ["docker"]
    }
}
2. 处理日志

Logstash 提供了丰富的 filter 插件来解析和转换日志数据。常见的 filter 插件包括 grokdatemutate 等。

例如,使用 grok 解析 Apache 访问日志:

conf

bash 复制代码
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
        match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
}
3. 存储日志

Logstash 将处理后的日志数据发送到 Elasticsearch。你可以在 output 插件中配置索引名称和其他存储选项。

例如,将日志存储到按天分隔的索引中:

conf

bash 复制代码
output {
    elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
    }
}
4. 可视化日志

Kibana 提供了一个强大的可视化界面,可以用来创建仪表板、图表和报告。以下是创建一个简单的仪表板的步骤:

  1. Index Patterns:

    • 打开 Kibana 并导航到 "Management" -> "Stack Management" -> "Index Patterns".
    • 创建一个新的 Index Pattern,例如 logstash-*.
  2. Discover:

    • 导航到 "Analytics" -> "Discover".
    • 查看收集的日志数据。
  3. Visualize:

    • 导航到 "Analytics" -> "Visualize".
    • 创建新的 Visualization,例如柱状图、折线图等。
  4. Dashboard:

    • 导航到 "Analytics" -> "Dashboards".
    • 创建一个新的 Dashboard,并添加之前创建的 Visualizations.

示例:收集 Docker 日志

假设我们要收集 Docker 容器的日志并将其存储到 Elasticsearch 中,然后在 Kibana 中可视化。

1. 修改 Logstash 配置

编辑 /etc/logstash/conf.d/logstash.conf 文件:

conf

bash 复制代码
input {
    docker {
        host => "unix:///var/run/docker.sock"
        tags => ["docker"]
    }
}

filter {
    if "docker" in [tags] {
        json {
            source => "message"
        }
        ruby {
            code => "
                event.set('container_id', event.get('source').split('/')[-1])
            "
        }
        mutate {
            remove_field => ["source", "prospector", "offset", "beat", "input_type", "count", "type"]
        }
    }
}

output {
    elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "docker-logs-%{+YYYY.MM.dd}"
    }
}
2. 启动 Logstash

bash

bash 复制代码
sudo systemctl restart logstash
3. 在 Kibana 中查看 Docker 日志
  1. Index Patterns:

    • 导航到 "Management" -> "Stack Management" -> "Index Patterns".
    • 创建一个新的 Index Pattern,例如 docker-logs-*.
  2. Discover:

    • 导航到 "Analytics" -> "Discover".
    • 查看 Docker 容器的日志数据。
  3. Visualize:

    • 导航到 "Analytics" -> "Visualize".
    • 创建新的 Visualization,例如柱状图、折线图等。
  4. Dashboard:

    • 导航到 "Analytics" -> "Dashboards".
    • 创建一个新的 Dashboard,并添加之前创建的 Visualizations.

总结

通过上述步骤,我们成功地安装和配置了 ELK Stack,并实现了日志的收集、处理、存储和可视化。ELK Stack 是一个强大且灵活的日志管理系统,适用于各种规模的应用场景。

相关推荐
ITPUB-微风14 分钟前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
大腕先生5 小时前
微服务环境搭建&架构介绍(附超清图解&源代码)
微服务·云原生·架构
文军的烹饪实验室5 小时前
处理器架构、单片机、芯片、光刻机之间的关系
单片机·嵌入式硬件·架构
猫头虎-人工智能6 小时前
NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析
gpt·架构·机器人·aigc·文心一言·palm
阿里妈妈技术6 小时前
提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践
架构
JAMES费6 小时前
figure机器人技术架构的演进初探——Helix人形机器人控制的革新
架构·机器人
程序员侠客行8 小时前
Spring事务原理详解 三
java·后端·spring·架构
jingwang-cs10 小时前
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
安全·中间件·钉钉·安全架构
WeiLai111212 小时前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构
菜鸟一枚在这14 小时前
深入剖析抽象工厂模式:设计模式中的架构利器
设计模式·架构·抽象工厂模式