日志篇- ES+Logstash+Filebeat+Kibana+Kafka+zk 安装配置与使用详解

news2025/2/4 19:08:28

1- 学习目标

  • ELK基本概念,特点
  • 安装部署 Kibana + ES集群 + Logstash + Filebeat + Kafka集群
  • 性能瓶颈以及优化
  • QA汇总

2- 介绍

2.1- 基本概念

  • Elasticsearch

分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;

  • Logstash

数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;

  • Kibana

数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;

  • Filebeat

ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。

filebeat是Beats中的一员。Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。

目前Beats包含六种工具:
Packetbeat:网络数据(收集网络流量数据)
Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
Filebeat:日志文件(收集文件数据)
Winlogbeat:windows事件日志(收集Windows事件日志数据)
Auditbeat:审计数据(收集审计日志)
Heartbeat:运行时间监控(收集系统运行时的数据)

  • Kafka

数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃

  • 常用架构及使用场景介绍

2.2- 特点

3- 安装部署

在这里插入图片描述

3.0- 准备工作

  • 安装java1.8环境
  • 实验环境介绍

db 172.16.212.11: kibana,filebeat,httpd
test1 172.16.212.21: kafka,zk,es
test2 172.16.212.22: kafka,zk,es
test3 172.16.212.23: kafka,zk,logstash,es

3.1- test1,2,3上安装Kafka集群

安装步骤详见 https://blog.csdn.net/qq_35550345/article/details/116237584

#创建topic
bin/kafka-topics.sh --create --zookeeper 172.16.212.21:2181 --topic httpd --partitions 3 --replication-factor 1
bin/kafka-topics.sh --create --zookeeper 172.16.212.21:2181 --topic test --partitions 3 --replication-factor 1

3.2- test1,2,3上安装ES集群

  • 1)安装并设置开机自启
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.0-x86_64.rpm
yum localinstall elasticsearch-7.13.0-x86_64.rpm -y
systemctl enable elasticsearch.service
  • 2)修改配置并启动
#1. 修改系统配置
vim /etc/security/limits.conf
#末尾添加
*       soft     nofile          65536
*       hard     nofile          131072
*       soft     nproc           2048
*       hard     nproc           4096
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

#2. 修改主要配置
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-es #集群名称,自定义
node.name: node-3   #当前节点的名字,可以与主机名不同 
path.data: /var/lib/elasticsearch   #数据存储位置
path.logs: /var/log/elasticsearch   #日志存储位置
network.host: 172.16.212.23     #绑定监听IP,对外服务port默认为9200
discovery.seed_hosts: ["172.16.212.21", "172.16.212.22", "172.16.212.23"]   #写入候选主节点的设备地址,在开启服务后可以被选为主节点
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]    #写入候选主节点的设备地址,在开启服务后可以被选为主节点

#3. 修改jvm配置
vim /etc/elasticsearch/jvm.options
##分配系统一半的内存,但最大最好不要超过32G
-Xms1g
-Xmx1g
##GC configuration
##-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly

#4. 修改日志配置
vim /etc/elasticsearch/log4j2.properties

#启动es
systemctl start elasticsearch.service

  • 3)检查集群运行情况
#查看当前节点信息
curl http://172.16.212.23:9200
{
  "name" : "node-3",
  "cluster_name" : "my-es",
  "cluster_uuid" : "X5b3K0jBRLO-1cnghQ5UTg",
  "version" : {
    "number" : "7.13.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "5ca8591c6fcdb1260ce95b08a8e023559635c6f3",
    "build_date" : "2021-05-19T22:22:26.081971330Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

#查看集群节点状态
curl http://172.16.212.23:9200/_cat/nodes?v
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
172.16.212.21           27          94   1    0.00    0.03     0.05 cdfhilmrstw *      node-1
172.16.212.23           48          94   1    0.08    0.12     0.10 cdfhilmrstw -      node-3
172.16.212.22           28          93   1    0.08    0.03     0.05 cdfhilmrstw -      node-2

#查看集群状态
curl http://172.16.212.23:9200/_cat/health?v
epoch      timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1622515553 02:45:53  my-es   green           3         3      0   0    0    0        0             0                  -                100.0%

#查看集群index状态
curl http://172.16.212.23:9200/_cat/indices?v

# 查看指定索引信息
curl "http://172.16.212.23:9200/_cluster/health/index_name?pretty"
curl "http://172.16.212.23:9200/_cluster/health/index_name,index_name2?pretty"

3.3- test3上安装Logstash

  • 1)安装并设置开机自启
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.13.0-x86_64.rpm
yum localinstall logstash-7.13.0-x86_64.rpm
systemctl enable logstash
  • 2)修改配置并启动logstash
vim /etc/logstash/conf.d/logstash.conf
input {
    kafka {
        bootstrap_servers => "172.16.212.21:9092,172.16.212.22:9092,172.16.212.23:9092"
        topics => ["test", "httpd"]
    }
}

filter {
    json {
        source => "message"
    }
    grok {
        match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]
    }
    date {
        match => ["logdate", "yyyy-MM-dd HH:mm:ss.SSS"]
        target => "@timestamp"
        locale => "ch"
        timezone => "Asia/Shanghai"
    }
    ruby {
         code => "require 'time'
                  event.set('datetime', Time.now.strftime('%Y%m%d'))"
    }
}

output {   
    file {
        path => "/opt/logs/logstash/%{[fields][service]}/%{[host][name]}-%{datetime}.log"
        codec => line { format => '%{message}' }
    }
    elasticsearch {
        hosts => ["172.16.212.21:9200", "172.16.212.22:9200", "172.16.212.23:9200"]
        index => "%{[fields][service]}-%{[host][name]}-%{+YYYY.MM.dd}"
    }
}
#启动
systemctl start logstash
  • 3)检查logstash运行情况
systemctl status logstash.service

3.4- db上安装Kibana

  • 1)安装并设置开机自启
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.13.0-x86_64.rpm
yum localinstall -y kibana-7.13.0-x86_64.rpm
systemctl enable kibana
  • 2)修改配置并启动kibana
vim /etc/kibana/kibana.yml
server.host: "172.16.212.11"
elasticsearch.hosts: ["http://172.16.212.21:9200", "http://172.16.212.22:9200", "http://172.16.212.23:9200"]
i18n.locale: "zh-CN"

systemctl start kibana
  • 3)检查kibana运行情况
systemctl status kibana

浏览器访问:http://172.16.212.11:5601

3.5- db上安装Filebeat

  • 1)安装并设置开机自启
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.0-x86_64.rpm
yum localinstall -y filebeat-7.13.0-x86_64.rpm
systemctl enable filebeat
  • 2)修改配置并启动filebeat
vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/httpd/access_log
  fields:
    service: httpd
    topic: httpd
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tail_files: true

- type: log
  enabled: true
  paths:
    - /var/log/messages
  fields:
    service: messages
    topic: test
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tail_files: true

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
  
filebeat.config.inputs:
  enabled: true
  path: ${path.config}/inputs.d/*.yml

output.kafka:
  hosts: ["172.16.212.21:9092","172.16.212.22:9092","172.16.212.23:9092"]
  topic: '%{[fields.topic]}'
  key: '%{[beat.hostname]}'

systemctl start filebeat
  • 3)检查filebeat运行情况
systemctl status filebeat

3.6-验证日志收集情况

  • 1)安装并启动httpd
yum -y install httpd
systemctl start httpd
systemctl status httpd

#浏览器访问 http://172.16.212.11,多访问几次,httpd的log日志会增加
ll /var/log/httpd
  • 2)查看日志收集情况

4- QA

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

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

相关文章

xv6---Lab4 traps

参考: Lab: Traps 关于寄存器s0和堆栈https://pdos.csail.mit.edu/6.828/2020/lec/l-riscv-slides.pdf RISC-V assembly Q: 哪些寄存器包含函数的参数?例如,哪个寄存器在main对printf的调用中保存了传参13 ? A: a2保存13(通过gdb调试可看出寄存器a2的…

【设备管理系统】如何助力制造企业实现精益生产?

随着企业对于机械设备的依赖性越来越高,生产设备日益大型化、自动化,流程线生产流程问题逐渐浮于表面,现阶段设备管理的各项制度已经不能够满足日常的生产工作。企业逐渐都面临着设备管理的复杂问题,尤其是设备的保养、维修、日常…

JMeter—HTTP压测

目录:导读 一、创建线程组 二、添加HTTP 三、查看结果树 四、响应断言 五、聚合报告 六、自定义变量 七、CSV可变参数压测 结语 一、创建线程组 右击-->添加-->Threads(Users)-->线程组 下面对比较重要的几个参数,讲解下: …

Vue基础7

Vue基础7生命周期引出生命周期用css animation实现用定时器实现错误:用methods实现使用生命周期函数mounted实现生命周期定义分析生命周期挂载流程beforeCreate()created()beforeMount()mounted()template的作用更新流程beforeUpdate()updated()销毁流程beforeDestr…

【数据库】二阶段锁

Two-phase locking (2PL) is a concurrency controlprotocol that determines whether a txn can access an object in the database on the fly. The protocol does not need to know all the queriesthat a txn will execute ahead of time. 分为两个阶段: 一阶…

颅内EEG记录揭示人类DMN网络的电生理基础

使用无创功能磁共振成像(fMRI)的研究为人类默认模式网络(DMN)的独特功能组织和深远重要性提供了重要的见解,但这些方法在跨多个时间尺度上解决网络动力学的能力有限。电生理技术对于应对这些挑战至关重要,但…

RAID 0 添加新磁盘

1:查看当前可用挂载磁盘 lsblk 2:可见 sda 与 sdb 已被挂载,需要挂载 sdc 和 sdd 由于硬盘的默认分区格式是MBR,这种格式的硬盘支持的最大挂载容量为2T,为了满足我们的要求,需要将硬盘格式转化为MBR&…

Node.js 编写接口入门学习(GET、POST)

一、简介 nvm 安装、卸载与使用(详细步骤),用于管理/切换 Node 多版本环境。 node 是否安装成功 $ node -v安装完成之后,通过 node 直接运行 test.js。 // test.js console.log(Hello Node)# 命令行执行 $ node test.js二、简单的…

[ 数据结构 -- 手撕排序算法第七篇 ] 归并排序

文章目录前言一、常见的排序算法二、归并排序的基本思想三、归并排序3.1 归并排序的递归版本3.2 归并排序的非递归版本四、归并排序的特性总结前言 手撕排序算法第七篇:归并排序! 从本篇文章开始,我会介绍并分析常见的几种排序,例…

深度学习秘籍

显式构造 隐式构造 loss通常是一个标量 batchsize越小其实越好 回归 预测的是一个连续 softmax回归是一个多分类问题 分类 预测是一个离散值 Huber RoBust Loss, 也就是通常所说SmoothL1损失 常用命令 import torch import torchvision from torchvision import transformsso…

ContentProvider的介绍和使用

文章目录ContentProviderContentProvider简介运行时权限Android权限机制详解在程序运行时申请权限访问其他程序当中数据ContentResolver的基本用法读取系统联系人信息创建自己的ContentProvider创建ContentProvider的步骤实现跨程序数据共享ContentProvider 如果我们想要实现跨…

浅拷贝深拷贝递归

常见的基本数据类型:Number、String 、Boolean、Null和Undefined 引用数据类型:Object、Array、Function 1)基本数据类型:存储在栈内存中,可以直接访问到该变量的值。 2)引用数据类型:存储在堆内存中,每…

有哪些数据统计软件适合初学者使用?

前段时间写过一篇“数据分析工具”的内容,周末有伙伴私信问我有没有什么适合初学者、业务人员的,更简单一点的数据可视化软件。 所以今天来分享下我在做数据分析时用过的几个简单易上手的数据可视化软件。 先放上目录: 数据统计收集类——简…

谷粒学院——Day12【整合阿里云短信服务、首页登录和注册】

用户登录业务介绍 一、单一服务器模式 早期单一服务器,用户认证。 缺点:单点性能压力,无法扩展。 二、SSO(single sign on)模式 分布式,SSO(single sign on)模式 优点: 用户身份信息独立管理,更好的…

关于安科瑞电气安全产品在医药工业洁净厂房的电气工程设计与应用

摘要: 近年来,医药工业洁净厂房的电气工程设计得到了快速发展和广泛关注,研究其相关课题有着重要意义。首先介绍了供电系统与配电设备的设置,分析了洁净厂房的电气照明设计,并结合相关实践经验,从探测器选…

智能无障碍轮椅——ESP8266总体介绍及ESP-01S入门调试

文章目录ESP8266 介绍ESP8266的多种型号1. DT-062. ESP-01和ESP-01S【左边ESP-01S,右边ESP-01】3. ESP-12F两种开发方式1. AT指令开发方式2. SDK开发方式固件烧录方法1. 硬件烧录工具2. 软件烧录工具WiFi模块工作模式:1. AP模式2. STA模式3. STAAP共存ES…

宏、条件编译(#ifdef)、#include(头文件包含)、#error和 #pragma的区别、#和##的含义和应用

1、在C语言预处理阶段,编译器首先对代码的处理时:先去注释,再宏替换。 2、在源文件的任何地方,宏都是可以定义的,与是否在函数内外无关。 3、宏的作用范围是:从定义处开始,往后的直到程序结束…

C++(老百科)

学了这么久的c,你们有没有想过一个问题:什么是c?(这还用问么,不大街上随便抓一个陌生人都知道)(那你现在给我抓个看看) C简介 C是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。––…

easyexcel读取excel将数据存到mysql【一个简单的例子】

读取excel 1 xml里面增加maven <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version> </depen…

项目管理软件适用于初创公司吗

我注意到关于小型团队的一件事是&#xff0c;在这种热情的背后隐藏着一家需要帮助的公司。他们通常缺乏职责结构&#xff0c;但这可能不是他们的主要需求。太多的结构会扼杀那些在较小的初创型公司中经营节目的企业家精神的努力&#xff0c;但他们几乎总是需要更有效的流程和一…