ELK日志采集系统搭建

news2024/12/28 13:44:59

需求背景

现在的系统大多比较复杂,一个服务的背后可能就是一个集群的机器在运行,各种访问日志、应用日志、错误日志量随着访问量和时间会越来越多,运维人员就无法很好的去管理日志,开发人员排查问题,需要到服务器上查日志,极为不方便。逐台登陆机器去查看日志特别费力,且效率慢。

为什么要用 ELK?

在日志分析场景一般使用最多的就是通过 grep、awk 命令获取想要的日志信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大、难以归档、搜索慢、多维度查询困难等。

如果像搜索引擎一样通过关键字搜索出相关的日志,岂不快哉。于是就有了集中式日志系统。ELK 就是其中一款使用最多的开源产品。

常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 警告-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

ELK 架构

ELK(Elasticsearch + Logstash + Kibana)是一套开源的日志管理方案,三者组合在一起搭建实时的日志分析平台。

  • Elasticsearch:简称 ES,是个开源分布式搜索引擎,是ELK的核心,基于Apache Lucene的开源数据搜索引擎,可以实时快速的搜索和分析,性能强悍。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
  • Logstash:一个具有实时传输能力的数据收集引擎,用来数据收集、分析、过滤日志的工具,支持多类型日志
  • Kibana:为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

这是最简单的一种 ELK 架构方式。此架构由 Logstash 分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的 Elasticsearch 进行存储。Elasticsearch 将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置 Kibana Web 方便的对日志查询,并根据数据生成报表。

优点:搭建简单,易于上手。

缺点:Logstash 耗资源较大,占用 CPU 和内存高。另外没有消息队列缓存,存在数据丢失隐患。

为解决传统 ELK 架构上的不足,对此进行了以下扩展:

Filebeat:一个轻量级日志采集器,早期的 ELK 架构中使用 Logstash 收集、解析日志,但是 Logstash 对内存、cpu、io 等资源消耗比较高,相比 Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。

Kafka:一种高吞吐量的分布式发布订阅消息系统,如果日志量巨大,还需要引入Kafka用以均衡网络传输,降低网络闭塞,保证数据不丢失,还可以系统之间解耦,具有更好的灵活性和扩展性。

filebeat 收集需要提取的日志文件,将日志文件转存到 kafka 中,logstash 处理 kafka 日志,格式化处理,并将日志输出到 elasticsearch 中,前台页面通过 kibana 展示日志。

使用 kafka 做缓存层,而不是直接将 filebeat 收集到的日志信息写入 logstash,让整体结构更健壮,减少网络环境,导致数据丢失。filebeat 负责将收集到的数据写入 kafka,logstash 取出数据并处理。

即解决的资源消耗过大问题,也解决了消息可能丢失的隐患。

环境介绍

jdk:17
kafka:3.3.2
elasticsearch:7.17.10
filebeat:7.17.10
kibana:7.17.10
logstash:7.17.10

JDK17

配置 JDK 环境,elasticsearch:7.17.10 需要 Java 11 以上的版本。

Kafka

1、下载并解压

新版的 kafka 已经内置了一个 zookeeper  环境,所以我们可以直接使用。

2、配置 zookeeper

zookeeper.properties

# 数据文件目录
dataDir=/data/zookeeper/data
# 客户端连接端口
clientPort=2181
# 客户端最大连接数限制
maxClientCnxns=0
admin.enableServer=false

启动

./bin/zookeeper-server-start.sh ./config/zookeeper.properties &

2、配置 kafka

server.properties

# 监听
listeners=PLAINTEXT://192.168.200.11:9092
# 日志存放路径
log.dirs=/data/logs/kafka
# zookeeper地址和端口
zookeeper.connect=192.168.200.11:2181

启动

./bin/kafka-server-start.sh ./config/server.properties &

3、测试

生产者发送消息测试

./bin/kafka-console-producer.sh --topic test --bootstrap-server 192.168.200.11:9092

消费者消费消息测试

./bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 192.168.200.11:9092

 

Filebeat

如上面所说,简单搭建的 ELK 是有缺陷的,如果 Logstash 需要添加插件,那就全部服务器的 Logstash 都要添加插件,扩展性差。所以就有了 FileBeat,占用资源少,只负责采集日志,不做其他的事情。

1、下载并解压

2、配置 filebeat.yml 文件

  • inputs:Filebeat 的输入为目标日志
  • ouput:Filebeat 的输出为 kakfa,指定 topic
# ============================== Filebeat inputs ===============================

filebeat.inputs:
- type: log
  id: filebeat-user-log
  enabled: true
  paths:
    - /data/logs/*.log
  # 定义日志标签,注意:不同的服务使用不同的标签
  tags: ["user-log"]

# 注释掉
# ---------------------------- Elasticsearch Output ----------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  # hosts: ["localhost:9200"]

  # 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"

# 新增
# ------------------------------ kafka Output -------------------------------
output.kafka:
  enable: true
  hosts: ["192.168.200.11:9092"]
  topic: "elk_logs_topic"

3、启动

启动Filebeat,需要指定配置文件,即刚才配置好的 filebeat.yml

./filebeat -c filebeat.yml &

注意

filebeat.yml 文件权限为 644,否则会报错:Exiting: error loading config file: config file ("filebeat.yml") can only be writable by the owner but the permissions are "-rw--w--w-" (to fix the permissions use: 'chmod go-w /opt/filebeat/7.17.10/filebeat.yml')

权限分别由三个数字表示:

r = 4
w = 2
x = 1

使用数字表示权限时,每组权限分别对应数字之和:

rw = 4 + 2 = 6
rwx = 4 + 2 + 1 = 7
r-x = 4 + 1 = 5

Elasticsearch

1、下载并解压

2、创建用户

root用户不能启动 elasticsearch 需要创建独立的用户

useradd elastic

3.修改文件归属用户

chown -R elastic:elastic 7.17.10/

切换用户

su elastic

4、配置 config/elasticsearch.yml 文件

http.port: 9200
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
# 如果需要设置密码需要开启下面两行
# xpack.security.enabled: true
# xpack.security.transport.ssl.enabled: true

5、启动

./bin/elasticsearch &

6、测试

[elastic@localhost 7.17.10]$ curl 192.168.200.11:9200
{
  "name" : "localhost.localdomain",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "6_zpcReFSTuR9hgkj9eOKg",
  "version" : {
    "number" : "7.17.10",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "fecd68e3150eda0c307ab9a9d7557f5d5fd71349",
    "build_date" : "2023-04-23T05:33:18.138275597Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

LogStash

使用 FileBeat 采集日志时就可以把 Logstash 抽出来,做一些滤处理之类的工作。

1、下载并解压

2、配置 config/logstash.yml 文件

node.name: local

3、创建 logstash-kafka.conf 配置文件

  • input :Logstash 去接 Filebeat 发送到 Kafka 的数据,配置 Kafka 相关的信息,指定 topic,并指明类型为 json
  • output : 需要向 ES 中存储,指定ES的地址,并创建索引:名称-年份.月份
input {
 kafka {
    bootstrap_servers => ["192.168.200.11:9092"]
    group_id => "elk_logs_group"
    topics => ["elk_logs_topic"]
    consumer_threads => 5
    codec => json {
      charset => "UTF-8"
    }
  }
}

output {
    # 按照日志标签对日志进行分类处理,日志标签在 filebeat 中定义
    if "user-log" in [tags] {
        elasticsearch {
          hosts => ["http://192.168.200.11:9200"]
          index => "user-log-%{+YYYY.MM.dd}"
          # user => "elastic"
          # password => "elastic"
        }
    }
    if "order-log" in [tags] {
        elasticsearch {
          hosts => ["http://192.168.200.11:9200"]
          index => "order-log-%{+YYYY.MM.dd}"
          # user => "elastic"
          # password => "elastic"
        }
    }
}

注意,需要保证格式的正确,且不能大写,要不然 LogStash会抛出异常。

3、启动

./bin/logstash  -f ./config/logstash-kafka.conf &

Kibana

1、下载并解压

2、创建用户

root用户不能启动 kibana 需要创建独立的用户

useradd kibana

3、修改文件拥有用户

chown -R kibana:kibana 7.17.10/

切换用户

su kibana

4、配置 kibana.yml 文件

server.port: 5601
server.host: "192.168.200.11"
elasticsearch.hosts: ["http://192.168.200.11:9200"]
# 中文页面
i18n.locale: "zh-CN"

5、启动

./bin/kibana

6、测试

打开浏览器输入 localhost:5601 ,如果能打开说明启动成功。

到此,程序安装工作就已经结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赛灵思 ZYNQ UltraScale+ MPSoC Petalinux驱动开发:EMIO-GPIO输入驱动

目录 Zynq UltraScale MPSoC Linux下EMIO-GPIO驱动1、MPSOC GPIO简介2、vivado中EMIO配置3、EMIO设备树修改 Zynq UltraScale MPSoC Linux下EMIO-GPIO驱动 声明:本文是学习赛灵思 Zynq UltraScale MPSoC 5EV过程中写的笔记,便于以后复习,参考…

基于Faster R-CNN实现目标检测

目录 1. 作者介绍2. Faster RCNN基本框架3.模型训练及测试3.1 数据集3.2 环境配置3.3 训练参数3.4 训练参数3.5 代码展示3.6 问题及分析 参考(可供参考的链接和引用文献) 1. 作者介绍 杨金鹏,男,西安工程大学电子信息学院&#x…

Mybatis-puls——入门案例和概述和CURD功能实现

前言 虽然但是,现在MyBatis_puls并不支持springboot3.x版本。 MyBatis_puls就像SpringBoot是为了快速开发Spring程序一样,这个是为了快速开发MyBatis程序。基于SpringBoot使用MP的开发流程 按照下面这个模板造就对了。 SpingBoot——SB整合MB的web项…

Profinet通信协议基础知识

目录 1、Profinet是PI退出的开放式以太网标准: 2、Profinet的参考模式 3、Profinet的应用领域

若依框架快速搭建(一)

若依框架开发 若依框架介绍前期准备相关工具IDEAwebstromNavcatMavenRedis 前后端项目搭建 后端搭建前端搭建源码下载 若依框架介绍 若以管理系统的网址:http://ruoyi.vip/ 代码为开源代码 主要分为四部分,第一个是整体项目,第二个是前后端…

UFS 3 - UFS RPMB

UFS 1-UFS RPMB 1 RPMB介绍2 RPMB Well Known Logical Unit Description3 Requirements3.1 RPMB Resources3.2 Algorithm and Key for MAC Calculation3.3 RPMB Message Components3.4 Request Message Types3.5 Response Message Types3.6 RPMB Operation Result 4 Implementa…

Springboot +spring security,前后端分离时的security处理方案(二)

一.简介 在前后端分离这样的开发模式下,前后端的交互都是通过 JSON 来进行数据传递的,无论登录成功还是失败,都不会有服务端跳转或者客户端跳转之类的操作。 也就是说无论登录成功还是失败,服务端都会返回一段登录成功或失败的 …

Go 1.19 排序算法

插入排序(InsertionSort) 插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素插入到已经排好序的序列中,从而得到一个新的有序序列。插入排序的具体过程如下: 从第一个元素开始,认为它已经是…

RK3568 i2s TDM数据抓取

1. I2S接口 I2S协议只定义三根信号线:时钟信号SCK、串行数据信号SD、左右声道选择信号WS。 SCK 时钟信号,Serial Clock,也可能称BCLK/Bit Clock或SCL/Serial Clock。 WS 左右声道选择信号,Word Select,也称帧时钟,也可能称LRCLK/Left Right Clock。 SD 串行数据信号,Ser…

计算机网络第一章——计算机网络系统结构(下)

提示:总角之宴,言笑晏晏。信誓旦旦,不思其反。反是不思,亦已焉哉。 文章目录 1.2.1 分层结构,协议,接口和服务为什么要有分层?怎么分层正式认识分层结构概念总结 1.2.2 OSI 参考模型ISO参考模型…

Markdown 格式文章的图床

chatGPT 奖励模型示意图: chatGPT RLHF(基于人类反馈的强化学习) 模型示意图: 强化学习过程示意图:

《HashMap的数据结构》

目录 HashMap概述&#xff1a; 数据结构的组成&#xff1a; 一个键值对是如何存入该结构中&#xff1a; HashMap中链表和红黑树的用途和转换方式 &#xff1a; HashMap概述&#xff1a; HashMap是基于哈希表的Map接口实现的&#xff0c;它存储的内容是键值对<key,value&g…

Web安全:文件包含漏洞测试(防止 黑客利用此漏洞.)

Web安全&#xff1a;文件包含漏洞测试. 文件包含的漏洞是 程序员在开发网站的时候&#xff0c;为了方便自己开发构架&#xff0c;使用了一些包含的函数&#xff08;比如&#xff1a;php开发语言&#xff0c;include() , include_once() , require_once() 等等 &#xff09;&a…

书单 | 数据治理的30本书

随着数字经济时代的到来&#xff0c;数据的价值不断被发掘。党的十九届四中全会首次将“数据”列为生产要素&#xff0c;充分凸显了数字经济时代数据对于经济活动和社会生活的巨大价值。开展数据治理的理论探索和实践创新&#xff0c;有利于全面释放数据价值助力数字经济发展&a…

校园高校共享单车管理系统nodejs+vue+express

设计的管理员的详细功能见下图&#xff0c;管理员登录进入本人后台之后&#xff0c;管理单车和区域&#xff0c;审核租赁订单和还车订单&#xff0c;收取租赁费用&#xff0c;查看单车租赁统计信息。 vue的文件结构其实就是一个index.html 中间的内容&#xff0c;用的是vue&am…

代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

二叉搜索树的最近公共祖先 题目链接&#xff1a;力扣 其实可以用之前普通二叉树最近公共祖先的算法。但是这样没有很好的利用二叉搜索树是有序的性质。 TreeNode* lowestCommonAncestor1(TreeNode* root, TreeNode* p, TreeNode* q) {if(!root || root p ||rootq) return roo…

嵌入式系统中重要的编程思想:分层与时间片

1. 分层思想 分层的思想&#xff0c;并不是什么神秘的东西&#xff0c;事实上很多做项目的工程师本身自己也会在用。分层结构确是很有用的东西&#xff0c;参透后会有一种恍然大悟的感觉。 如果说我不懂LCD怎么驱动&#xff0c;那好办&#xff0c;看一下datasheet&#xff0c…

Java技术规范概览

Java技术规范 目录概述需求&#xff1a; 设计思路实现思路分析1.Java JSR的部分2.JSR-000373.JSR-0000394.JSR-000337 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a bet…

三步快速激活chatGPT4

0、背景 Depay停止注册背景下&#xff0c;新用户如何开通chatGPT4&#x1f914;? 注意事项; 1.选在8:00-22:00之间阅读本教程&#x1f600;&#x1f601;&#x1f604; 2.本教程尝试过欧易和nodepay&#xff0c;但都不好用&#xff0c;故采用FOMEpay&#x1f60d;&#x1f60…

#Microsoft Edge功能测评!# 关于Edge浏览器以及插件推荐

关于Edge浏览器以及插件推荐 1.关于Microsoft Edge......1.1 什么是Microsoft Edge1.2Microsoft Edge的优势 2.Microsoft Edge的分屏功能2.1 如何分屏&#xff1f;2.2分屏的优势 3.Microsoft Edge插件推荐3.1 AIX智能下载器(图片/视频/音乐/文档)3.2 AdGuard 广告拦截器3.3 破解…