ELK学习笔记(一)

ELK学习笔记(一)

前段时间排查项目日志找bug时,查看大量日志查的苦不堪言。由于部署在服务器上,还是把日志写成多个100M的日志.log文件夹。排查问题时耗费大量的时间。然后选择后续改用了阿里云的云服务的SLS日志服务。感受是相当好用。于是!我便了解起了类似于SLS日志服务的相关技术。就是这个ELK。分别是(Elasticsearch,Logstash,Kibana)。话不多说先把Elasticsearch,Logstash,Kibana三个模块简单介绍一下后。马上本地部署一套使用。用过了就知道是什么东西。

Elasticsearch

Elasticsearch 是一种分布式搜索和分析引擎、可扩展数据存储和矢量数据库,针对生产规模工作负载的速度和相关性进行了优化。Elasticsearch 是 Elastic 开放 Stack 平台的基础。近乎实时地搜索海量数据集、执行矢量搜索、与生成式 AI 应用程序集成等等。(取自官方说明)

Elasticsearch 我们常说的搜索引擎了。那么他是做什么的呢?常见的应用场景有全文搜索、日志分析、数据分析、监控系统。本篇主要讲的是日志分析。也就是我们用到的ELK。在ELK中Elasticsearch主要角色是存储搜索。负责存储 文档型(JSON)的日志,以及提供对日志的搜索能力。

Logstash

Logstash 是一个开源服务器端数据处理管道,它从多种来源获取数据,对其进行转换,然后将其发送到您最喜欢的“存储”(取自官方说明)。主要负责数据采集,数据清洗,格式转换,然后存进Elasticsearch。支持读取多种来源的数据比如日志文件,数据库,kafuka,rabbitmq等多种来源的数据。

Kibana

Kibana数据的可视化工具。在这ELK提供了我们日志采集的可视化界面,以及搜索,统计,分析等功能。当然他本身并不具备搜索功能。只是一个前端展示层。他是通过依赖于Elasticserach的来执行搜索的。他能将用户在可视化界面的查询请求转为Elasticsearch的查询api。从而实现搜索的功能

部署

由于主要用于学习目的。选择在windows上做一下简单的部署。采用docker的方式。

安装docker

自行安装docker desktop

编写docker compose

内容如下,自己网上搜或者找ai工具写一下都可以

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.1
    container_name: elasticsearch
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.type=single-node"
      - "xpack.security.enabled=false"  # 关闭安全验证(适用于本地开发)
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - D:\docker\ELK\data:/usr/share/elasticsearch/data  # 持久化数据

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.1
    container_name: kibana
    environment:
      - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.1
    container_name: logstash
    volumes:
      - D:\docker\ELK\logstash/config:/usr/share/logstash/config  # 挂载 Logstash 配置文件
      - D:\docker\ELK\logstash/pipeline:/usr/share/logstash/pipeline  # 挂载 Logstash pipeline
    environment:
      - "LS_JAVA_OPTS=-Xms256m -Xmx512m"  # 调整 Logstash 的 JVM 内存
    ports:
      - "5044:5044"   # Beats 输入(可选)
      - "9600:9600"   # Logstash API 端口
    depends_on:
      - elasticsearch

D:\docker\ELK\logstash/config 映射到容器内/usr/share/logstash/config 是 Logstash 的核心配置目录,用于存储全局配置文件、管道定义、环境变量等下。文件分别有

logstash.yml 内容如下

http.host: "0.0.0.0"
xpack.monitoring.enabled: false  # 关闭监控(可选)

pipelines.yml 内容如下

- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline/logstash.conf"

D:\docker\ELK\logstash/pipeline:/usr/share/logstash/pipeline映射到容器内的/usr/share/logstash/pipeline目录 用于存储 管道配置文件(Pipeline Configuration Files)。这些文件定义了 Logstash 如何处理数据,包括数据的输入、过滤和输出。该目录文件有

logstash.conf 内容如下

# 输入的配置,通过TCP从5044端口输入。这里需要容器把5044端口映射出去。
input {
  tcp {
    port => 5044
  }
}

filter {
  json {
    source => "message"
  }
}
# 输出配置。把数据输出到elasticsearch,并生成动态索引名。
output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }  # 打印日志到控制台,方便调试
}

配置完以上东西后,运行docker compose up -d 即可运行起来。

在这里插入图片描述

确认一下容器是否都运行起来

在这里插入图片描述

这里如果有网络问题。排查三个容器是否在同一个docker网络下。接着访问一下浏览器http://localhost:5601便可以进入到kibana可视化界面了

编写demo

由于我自己是写java的所有这里写了一个springboot的demo尝试一下

创建一个springboot应用。

在pom文件引入依赖

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>7.4</version>
</dependency>

配置logback.xml文件

<configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:5044</destination>  <!-- Logstash 的地址和端口 -->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

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

写一个测试接口

package org.example.elk_demo1.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {

    @RequestMapping("test1")
    public Object test1() {
        log.info("test1方法调用成功");
        return "调用成功";
    }
}

运行起来调用一下接口

在这里插入图片描述

然后访问http://localhost:5601进入kibana左侧菜单栏Discover。创建数据视图便可查看到我们发送的日志了。

在这里插入图片描述
在这里插入图片描述

这里logstash-2025.03.09就是前面D:\docker\ELK\logstash/pipeline:/usr/share/logstash/pipeline目录下的logstash.conf文件配置的index => “logstash-%{+YYYY.MM.dd}”。可以根据不同的项目在/usr/share/logstash/pipeline配置多个管道不同的索引来区分项目。并在kibana创建对应不同项目的视图。

创建完视图我们就可以看到我们刚刚发送的日志了,并且在kibana可以进行筛选,查询,统计等操作。

在这里插入图片描述

ELK学习笔记(二)(简单介绍了spring cloud sleuth在ELK作为日志服务中的作用,以及kibana的简单使用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值