监控三套件EFK + Prometheus + SkyWalking, 经不经典我不管, 我就喜欢这一款

想和你在玫瑰花瓣上安家 过着风的生活 最后一起老去在四季里

监控三套件 | EFK + Prometheus + SkyWalking

应用假设使用 springboot + k8s技术栈

EFK + Prometheus + SkyWalking 监控三套件管上,这三个分别是日志、metrics和调用链监控的利器

日志主要用来排查程序行级问题

Metrics的主要作用是帮助开发人员了解系统或应用程序的性能和运行情况,以便快速定位和解决问题

调用链主要用来排查程序性能问题, 比如在哪个环节比较慢, 我们可以直观看出在哪个流程出现了问题

EFK主要用于分布式应用程序的日志管理和分析,Prometheus主要用于采集和存储系统或应用程序的指标数据,SkyWalking主要用于监测和追踪分布式应用程序的请求链路。因此,在实际应用中,可以根据具体的应用场景和需求来选择合适的监测系统或组合使用多种监测系统,以便全面监测和优化系统或应用程序的性能

EFK

EFK是Elasticsearch、Fluentd和Kibana的缩写,它们分别是日志存储、日志采集和日志可视化工具。EFK可以帮助开发人员集中管理和分析分布式应用程序的日志数据,快速发现和解决问题

Fluentd收集Springboot应用的日志示例配置
  1. 安装Fluentd

在Linux服务器上,可以使用如下命令安装Fluentd:

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh

  1. 配置Fluentd

在Fluentd的配置文件中,需要定义输入(input)和输出(output)插件。

在输入插件中,需要指定Spring Boot应用程序的日志文件路径。在输出插件中,需要指定数据的传输方式和目的地,例如传输到Elasticsearch或Kafka等。

以下是一个基本的Fluentd配置文件示例:

<source>
  @type tail
  path /var/log/springboot-app.log
  pos_file /var/log/springboot-app.log.pos
  tag springboot.app
  <parse>
    @type none
  </parse>
</source>

<match springboot.app>
  @type elasticsearch
  host localhost
  port 9200
  index_name fluentd
  type_name springboot
  logstash_format true
  flush_interval 1s
</match>

在上述配置文件中,我们定义了一个tail输入插件,指定了Spring Boot应用程序的日志文件路径和输出的tag。在match输出插件中,我们指定了数据输出的目的地,即Elasticsearch,并指定了索引名称和类型名称等参数。

  1. 配置Spring Boot

在Spring Boot应用程序中,可以使用logback作为日志框架,并使用logstash-logback-encoder插件将日志格式转换为logstash格式,以便更好地与Fluentd集成。

以下是一个基本的logback配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:24224</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="STASH" />
    </root>
</configuration>

在上述配置文件中,我们定义了一个名为STASH的LogstashTcpSocketAppender,指定了Fluentd的主机和端口号,并指定了LogstashEncoder格式化器。

通过以上配置,Spring Boot应用程序的日志就可以被Fluentd收集并输出到Elasticsearch或其他指定的目的地中。

需要注意的是,在使用Fluentd收集日志时,需要注意日志的格式和内容,以便更好地进行处理和分析。

Prometheus

Prometheus是一种开源的时间序列数据库和监测系统,主要用于采集和存储系统或应用程序的指标数据,如请求响应时间、QPS、内存使用率等。Prometheus提供了灵活的查询和可视化功能,帮助开发人员快速定位和解决系统或应用程序的性能问题

metrics | 系统或应用程序性能指标数据

Metrics是系统或应用程序中用于描述性能、运行状态或其他关键指标的数据,是监测和分析系统或应用程序性能的核心数据类型。Metrics通常由多个维度(Dimensions)和指标(Measurements)组成。

维度表示Metrics数据的分类属性,例如系统或应用程序的实例、环境、版本等。指标表示Metrics数据的数值属性,例如请求响应时间、QPS、内存使用率等。

Metrics的主要作用是帮助开发人员了解系统或应用程序的性能和运行情况,以便快速定位和解决问题。通过采集和分析Metrics,可以实现以下几个方面的功能:

  1. 性能监测:监测系统或应用程序的性能指标,如响应时间、QPS、错误率等,以便快速发现性能瓶颈和优化点。

  2. 故障诊断:监测系统或应用程序的运行状态,如系统负载、服务可用性等,以便快速发现故障和解决问题。

  3. 容量规划:通过分析系统或应用程序的Metrics趋势,预测未来的容量需求,以便为系统或应用程序的扩容做好准备。

  4. 服务级别协议(SLA)监测:通过监测服务的Metrics指标,判断服务是否符合SLA要求,以便提高服务质量和用户体验。

Metrics可以通过多种工具进行采集、存储、查询和可视化,如Prometheus、Grafana、InfluxDB等,这些工具都提供了灵活的配置和可视化功能,可以满足各种应用场景的需求。

产生

Metrics是通过在系统或应用程序中埋点(Instrumentation)来产生的。埋点是指在系统或应用程序中插入代码,用于收集和传递Metrics数据。

在Java应用程序中,可以使用各种Metrics库或框架来实现Metrics的埋点。这些库或框架通常会提供各种类型的Metrics,如计数器、直方图、分布式跟踪等,可以通过注解、API调用等方式来采集和传递Metrics数据。

例如,在Spring Boot应用程序中,可以使用Spring Boot Actuator库来采集和暴露应用程序的Metrics。Actuator库提供了多种Metrics指标,如内存使用量、CPU使用率、HTTP请求量、响应时间等,可以通过HTTP请求的方式来获取这些指标数据。

在分布式系统中,Metrics通常是通过代理或侧车(sidecar)来收集和传递。例如,Istio中的Envoy代理可以收集应用程序的Metrics,通过Prometheus等监测系统进行存储和分析。

总之,Metrics是通过在系统或应用程序中埋点来产生的,开发人员可以使用各种Metrics库或框架来实现Metrics的采集和传递,以便对系统或应用程序的性能和运行情况进行监测和分析。

作用

Metrics不仅可以用于统计系统资源使用情况,还可以用于统计应用程序的性能、业务数据或其他关键指标。Metrics的数据来源可以包括系统资源、应用程序的函数、方法或接口调用等。

例如,Metrics可以用于统计以下指标:

  1. 系统资源使用情况,如CPU使用率、内存使用率、磁盘使用率等。

  2. 应用程序的性能指标,如请求响应时间、吞吐量、错误率等。

  3. 业务数据,如订单量、支付成功率、用户注册量等。

  4. 其他关键指标,如服务器的负载、网络延迟、服务可用性等。

Metrics的主要作用是帮助开发人员了解系统或应用程序的性能和运行情况,以便快速定位和解决问题。通过对Metrics的分析,可以优化系统或应用程序的性能,提高系统的可用性和用户体验。

因此,Metrics不仅仅用于统计系统资源使用情况,它可以用于统计多种指标,帮助开发人员了解系统或应用程序的性能和运行情况。

SkyWalking

SkyWalking是一种开源的分布式应用程序跟踪和性能监测系统,主要用于监测和追踪分布式应用程序的请求链路,提供更全面的性能指标和分析。SkyWalking提供多种分析功能,如错误分析、性能瓶颈分析等,可以帮助开发人员深入了解应用程序的性能问题

入门

请先阅读 芋道 SkyWalking 9.X 极简入门(新版本) | 芋道源码 —— 纯源码解析博客

再读 芋道 Spring Boot 链路追踪 SkyWalking 入门 | 芋道源码 —— 纯源码解析博客 (iocoder.cn)

这个博主写的可太好, 有好多示例

mysql示例

搭建一个 mysql 工程

@RestController
@RequestMapping("/demo")
public class DemoController {

    @Autowired
    private JdbcTemplate template;

    @GetMapping("/mysql")
    public String mysql() {
        this.selectById(1);
        return "mysql";
    }

    public Object selectById(Integer id) {
        return template.queryForObject("SELECT id, username, password FROM t_user WHERE id = ?",
                new BeanPropertyRowMapper<>(Object.class), // 结果转换成对应的对象。Object 理论来说是 UserDO.class ,这里偷懒了。
                id);
    }

}

Run/Debug Configurations

简单测试

1、首先,使用浏览器,访问下 http://127.0.0.1:8079/demo/mysql 地址,请求下 Spring Boot 应用提供的 API。因为,我们要追踪下该链路。

2、然后,继续使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:

SkyWalking UI 界面 —— 仪表盘

接着,点击「Database Dashboard」选项,再点击「Database」选项,可以以数据库为维度的监控数据。如下图所示:

SkyWalking UI 界面 —— 仪表盘(Database)

之后,点击「拓扑图」菜单,进入查看拓扑图的界面,可以看到 MySQL 小方块。如下图所示:

SkyWalking UI 界面 —— 拓扑图

再之后,点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

SkyWalking UI 界面 —— 追踪

点击红圈的 MySQL 操作的链路数据,可以看到数据的 SQL 语句。如下图所示:

SkyWalking UI 界面 —— 追踪(MySQL)

这里,我们暂时无法看到 SQL 的数据参数,可以通过修改 config/agent.config 配置文件,将 plugin.mysql.trace_sql_parameters 配置项,设置为 true 。例如:

# mysql plugin configuration
plugin.mysql.trace_sql_parameters=${SW_MYSQL_TRACE_SQL_PARAMETERS:true}

当然,也可以通过 SW_MYSQL_TRACE_SQL_PARAMETERS 环境变量。

参考

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是10道可能出现在EFK面试中的题目和答案: 1. 什么是EFK?它们分别代表什么? 答案:EFK是用于日志记录与分析的一组工具,包括Elasticsearch、Fluentd和Kibana。其中Elasticsearch用于存储和搜索日志数据,Fluentd用于收集和传输日志数据,Kibana用于可视化和分析日志数据。 2. 如何安装EFK? 答案:可以使用Docker Compose或者手动安装方式来安装EFK。手动安装需要先安装Elasticsearch、Fluentd和Kibana个组件,然后配置它们之间的数据传输和集成。Docker Compose则可以通过一个YAML文件来快速部署整个EFK环境。 3. 如何收集多个服务器的日志数据? 答案:可以使用Fluentd的网络插件来收集多个服务器的日志数据。在每个服务器上安装Fluentd并配置相应插件,然后将数据发送到Elasticsearch进行存储和分析。 4. 如何监控Elasticsearch的性能? 答案:可以使用Elasticsearch的监控插件或者第方的监控工具来监控Elasticsearch的性能。监控插件包括Elasticsearch-head和Elasticsearch-HQ,它们可以监控集群的健康状态、节点的负载和性能等。第方工具包括Grafana和Prometheus,它们可以通过API接口来获取Elasticsearch的性能数据,并进行可视化。 5. 如何优化Elasticsearch的性能? 答案:可以通过以下方法来优化Elasticsearch的性能:增加硬件资源,例如CPU、内存和存储;优化索引结构和数据模型;使用分片和副本来提高查询性能和可用性;调整Elasticsearch的配置参数,例如缓存大小、刷新间隔和线程数等。 6. 如何在Kibana中创建一个Dashboard? 答案:可以通过以下步骤来创建一个Dashboard:在Kibana中选择“Dashboard”选项卡,然后点击“Create new dashboard”按钮;选择需要添加的可视化图表,例如柱状图、饼图或折线图;通过“Add”按钮添加查询条件和过滤器,然后保存Dashboard并发布到Kibana中。 7. 如何在Kibana中进行数据分析? 答案:可以使用Kibana的查询语言和可视化工具来进行数据分析。查询语言包括Lucene查询语法和Kibana查询语法,可以通过输入关键词和条件来搜索和过滤日志数据。可视化工具包括柱状图、饼图、折线图等,可以通过拖拽和配置参数来呈现数据的不同方面。 8. 如何在Fluentd中配置缓冲区? 答案:可以通过在Fluentd的配置文件中添加缓冲区插件来配置缓冲区。缓冲区分为内存缓冲区和磁盘缓冲区,可以根据需要选择合适的缓冲区插件和参数。例如,可以使用file插件来将数据写入磁盘文件,或者使用memory插件来将数据缓存到内存中。 9. 如何在Fluentd中实现日志分发? 答案:可以通过使用Fluentd的输出插件来实现日志分发。输出插件包括Elasticsearch插件、Kafka插件、AWS S3插件等,可以将日志数据发送到不同的目标存储或处理系统。在配置输出插件时,可以选择合适的协议和格式,例如TCP、UDP、HTTP和JSON等。 10. 如何在Elasticsearch中进行数据备份和恢复? 答案:可以使用Elasticsearch的快照和还原功能来进行数据备份和恢复。快照是指将Elasticsearch的索引和数据存储到外部存储介质中,例如文件系统或云存储。还原则是将快照中的数据恢复到Elasticsearch中。可以使用Elasticsearch的API接口或者Kibana的管理界面来执行快照和还原操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值