ELK实战(最详细)

一、什么是ELK

ELK是三个产品的简称:ElasticSearch(简称ES) 、Logstash Kibana 。其中:

  • ElasticSearch:是一个开源分布式搜索引擎
  • Logstash :是一个数据收集引擎,支持日志搜集、分析、过滤,支持大量数据获取。其自带输入(input)、过滤语法(grok)、输出(output)三部分,可将数据输出到ES
  • Kibana:为 Elasticsearch 提供了分析和 Web 可视化界面

二、如何搭建ELK

各个版本:

ElasticSearch ,Logstash ,Kibana 的版本都为 7.14.0 , JDK:11

1、搭建 ElasticSearch 和 Kibana

参考我之前的博客:

Springboot中使用Elasticsearch(部署+使用+讲解 最完整)_spring boot elasticsearch-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_73440769/article/details/141477177?spm=1001.2014.3001.5501

2、搭建Logstash

1.查看自己的es版本

docker images

2.拉取镜像

这个步骤有点慢,可能是我的网络原因

docker pull docker.elastic.co/logstash/logstash:7.14.0

3.上传mysql的连接jar包

 可以去IDEA里面复制你Maven里面的:

创建文件夹存放

mkdir -p /opt/logstash/jar
mkdir -p /opt/logstash/jar




4.运行一下镜像获取配置文件

docker run -d --name=logstash logstash:7.14.0

第一次创建 用于复制文件 

5.查看日志

docker logs -f logstash

 

6.拷贝数据

docker cp logstash:/usr/share/logstash/config /opt/logstash
docker cp logstash:/usr/share/logstash/data /opt/logstash
docker cp logstash:/usr/share/logstash/pipeline /opt/logstash

7.给文件夹赋权

cd /opt/logstash
chmod -R 777 ./config ./data ./pipeline



8.删除容器
 

docker rm -f logstash



9.重新启动容器

docker run -d \
  --name=logstash \
  --restart=always \
  -p 5044:5044 \
  -v /opt/logstash/data:/usr/share/logstash/data \
  -v /opt/logstash/jar/mysql-connector-java-8.0.25.jar:/usr/share/logstash/mysql-connector-java-8.0.25.jar \
  -v /opt/logstash/config:/usr/share/logstash/config \
  -v /opt/logstash/pipeline:/usr/share/logstash/pipeline \
  logstash:7.14.0



10.更新配置文件logstash.conf

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.25.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://数据库IP/quick_pickup"
    jdbc_user => "数据库用户名"
    jdbc_password => "数据库密码"
    statement => "
    SELECT 
        id AS id,
        openid AS openid,
        quick_user_id AS quickUserId,
        name AS name,
        sex AS sex,
        avatar AS avatar,
        phone AS phone,
        follow AS follow,
        fan AS fan,
        wallet AS wallet,
        DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime,
        use_time AS useTime,
        collect_number AS collectNumber,
        mark_number AS markNumber,
        brief_introduction AS briefIntroduction
    FROM 
        user
    "
    lowercase_column_names => false # 关闭传输字段默认小写的配置
	# 开启分页
    jdbc_paging_enabled => true
    jdbc_page_size => 2000
    schedule => "*/5 * * * * * UTC"  # 每5秒执行一次
  }
}

output {
  elasticsearch {
    hosts  => ["es所在服务器的IP:9200"]
    index  => "user"                 # Elasticsearch 索引名称
    document_id => "%{id}"           # 使用 MySQL 的主键 `id` 作为文档 ID
    codec  => "json"
  }
}

11.修改logstash.yml

12.重启容器

docker stop logstash
docker start logstash

或者:
 

docker restart logstash




13.再次打印日志查看

docker logs -f logstash

三、提醒

记得打开服务器对应的端口(5044)

四、可能遇到的bug

下面是我之前遇到的问题,最后都解决了,上面配置文件是最新更新后的配置文件

  1. logstash输出到es的字段都是小写
  2. 时间字段不是我们希望的格式
这些bug可以参考我上面编写更新后的配置文件,下面给出github一个大佬的一些汇总,可以参考一下:


https://github.com/logstash-plugins/logstash-filter-date/issues/158icon-default.png?t=O83Ahttps://github.com/logstash-plugins/logstash-filter-date/issues/158

#logstash输入配置
input {
  #jdbc输入配置,用来指定mysql中需要同步的数据查询SQL及同步周期
  jdbc {
    type => "jdbc"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/dh_order?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false"
    # 数据库连接账号密码;
		jdbc_user => "dh_test"
		jdbc_password => "Y2017dh123"
    # MySQL依赖包路径;
		jdbc_driver_library => "mysql/mysql-connector-java-5.1.49.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    # 数据库重连尝试次数
		connection_retry_attempts => "3"
    # 判断数据库连接是否可用,默认false不开启
		jdbc_validate_connection => "true"
    # 数据库连接可用校验超时时间,默认3600S
		jdbc_validation_timeout => "3600"
    # 是否开启分页
    jdbc_paging_enabled => true
    # statement => "SELECT *, UNIX_TIMESTAMP(modification_time) AS unix_ts_in_secs FROM es_table WHERE (UNIX_TIMESTAMP(modification_time) > :sql_last_value AND modification_time < NOW()) ORDER BY modification_time ASC"
    # statement => "SELECT * FROM `t_car_order` limit 1"
    statement => "SELECT id,create_time FROM `t_car_order` limit 1"
    # 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
		# lowercase_column_names => false
    # Value can be any of: fatal,error,warn,info,debug,默认info;
		# sql_log_level => warn
		sql_log_level => debug
    # 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中;
		# record_last_run => true
		 # 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值;
		# use_column_value => true
		 # 需要记录的字段,用于增量同步,需是数据库字段
		# tracking_column => "ModifyTime"
		 # Value can be any of: numeric,timestamp,Default value is "numeric"
		# tracking_column_type => timestamp
		 # record_last_run上次数据存放位置;
		# last_run_metadata_path => "mysql/last_id.txt"
		 # 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;
		# clean_run => false
		# 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务,这里设置为每5分钟同步一次
    # schedule => "*/5 * * * * *"

    # 用来控制增量更新的字段,一般是自增id或者创建、更新时间,注意这里要采用sql语句中select采用的字段别名
    # tracking_column => "unix_ts_in_secs"
    # tracking_column 对应字段的类型
    # tracking_column_type => "numeric"
    


  }
}
#logstash输入数据的字段匹配和数据过滤
# filter {
#   mutate {
#     copy => { "id" => "[@metadata][_id]"}
#     remove_field => ["id", "@version", "unix_ts_in_secs"]
#   }
# }
filter {
  # date {
  #   match => ["update_time", "yyyy-MM-dd HH:mm:ss"]
  #   target => "update_time"
  # }
  # date {
  #   match => ["create_time", "yyyy-MM-dd HH:mm:ss"]
  #   target => "create_time"
  # }
  # mutate {
  #   convert => { "create_time" => "text" }   # 将create_time字段转换为字符串类型
  # }
  
  # ruby {
  #   code => 'event.set("create_time", event.get("create_time").strftime("%Y-%m-%d %H:%M:%S"))'
  # }
  #  date {
  #   match => ["create_time", "yyyy-MM-dd HH:mm:ss"]
  #   target => "create_time"
  #   timezone => "Asia/Shanghai" # 你的时区
  # }
  mutate {
    add_field => { "index_date" => "%{create_time}" }
  }
  # mutate {
  #   rename => { "create_time_string" => "index_date" }
  # }
  #  date {
  #   # match => ["index_date", "ISO8601"]
  #   match => ["index_date", "ISO8601"]
  #   # target => "index_date"
  # }
  
    
  # }
  date {
    match => ["index_date", "yyyy-MM-dd HH:mm:ss"]
    # target => "index_date"
    # target => "index_date"
  }
  # mutate {
  #   add_field => {
  #     "index_date1" => "%{index_date}"
  #   }
 
}
#logstash输出配置
output {
  # 采用stdout可以将同步数据输出到控制台,主要是调试阶段使用
  # stdout { codec =>  json_lines}
  stdout { codec =>  rubydebug}

  # 指定输出到ES的具体索引
  # elasticsearch {
  #     index => "rdbms_sync_idx"
  #     document_id => "%{[@metadata][_id]}"
  # }
  elasticsearch {
		 # host => "192.168.1.1"
		 # port => "9200"
		 # 配置ES集群地址
		# hosts => ["192.168.1.1:9200", "192.168.1.2:9200", "192.168.1.3:9200"]
		hosts => ["localhost:9200"]
		 # 索引名字,必须小写
		# index => "t_car_order-%{+YYYY.MM.dd}"
		index => "t_car_order_%{index_date}"
		# index => "t_car_order_@timestamp"
		# index => "t_car_order3"
		 # 数据唯一索引(建议使用数据库KeyID)
		# document_id => "%{KeyId}"
		document_id => "%{id}"
		# document_id => "ID"
	}
}

 关于字段大小写问题还可以参考这几篇博客:

Elasticsearch-logstash同步mysql数据 字母大小写问题_es 字段小写-CSDN博客文章浏览阅读2.5k次。logstash同步mysql数据的时候,sql里面含有的大写字母,到了ES的时候就会变成小写,这是因为在jdbc.conf里面没有添加lowercase_column_names => false"这个属性,就导致es里面看到的字段名称全是小写。最后总结:es是支持大写字段名称的,如果想要保留原有的大写字母,需要在同步配置中加上lowercase_column_names ..._es 字段小写https://blog.csdn.net/qinyuezhan/article/details/89215215

Logstash将字段名全部转换为小写 - 腾讯云开发者社区 - 腾讯云Logstash是一个开源的数据收集引擎,用于将不同来源的数据进行收集、转换和传输。它是Elastic Stack(Elasticsearch、Logstash、Kibana)中的一部分,用于处理和分......icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/information/Logstash%E5%B0%86%E5%AD%97%E6%AE%B5%E5%90%8D%E5%85%A8%E9%83%A8%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B0%8F%E5%86%99-salon

五、至此ELK搭建结束

欢迎大家在评论区谈一下自己遇到的问题和看法,互相学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车物资拍卖系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…

利用 Python 爬虫从义乌购根据关键词获取商品列表

在当今数字化商业时代&#xff0c;数据是企业获取竞争优势的关键。对于从事国际贸易的商家而言&#xff0c;能够及时、准确地获取商品信息至关重要。义乌购作为知名的国际贸易批发平台&#xff0c;汇集了海量的商品资源。通过 Python 爬虫技术&#xff0c;我们可以高效地从义乌…

HDFS编程 - 使用HDFS Java API进行文件操作

文章目录 前言一、创建hdfs-demo项目1. 在idea上创建maven项目2. 导入hadoop相关依赖 二、常用 HDFS Java API1. 简介2. 获取文件系统实例3. 创建目录4. 创建文件4.1 创建文件并写入数据4.2 创建新空白文件 5. 查看文件内容6. 查看目录下的文件或目录信息6.1 查看指定目录下的文…

直流无刷电机控制(FOC):电流模式

目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数&#xff0c;实现直流无刷电机控制&#x…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种&#xff0c;按照数据传送方式可分为串行通信和并行通信&#xff1b; 按照通信的数据同步方式&#xff0c;可分为异步通信和同步通信&#xff1b; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合&#xff1b;它是通往优化个人计算体验的大门。通过它&#xff0c;用户可以轻松调整从外观到性能的各种参数&#xff0c;确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备&#xff0c;还是简单地改变桌…

浅谈弱电系统RVVP和RVSP电缆的区别(

1、RVVP 1.1RVVP电缆定义&#xff1f; RVVP电缆抗干扰软电缆、屏蔽电缆、信号电缆、控制电缆&#xff08;名字很多&#xff09;&#xff0c;学名&#xff1a;铜芯-聚氯乙烯绝缘-屏蔽聚氯乙烯护套-软电缆。 1.2RVVP执行标准 主要执行标准为JB/T8734.5-2016&#xff0c;部…

Python的pandas库基础知识(超详细教学)

目录 一、配置环境 二、序列和数据表 2.1 初始化 2.2 获取数值 2.3 获取索引 2.4 索引取内容 2.5 索引改变取值 2.6 字典生成序列 2.7 计算取值出现次数 2.8 数据表 2.9 数据表添加新变量 2.10 获取列名 2.11 根据列名获取数据 2.12 输出固定行 2.13 输出多行…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…

【Rust自学】11.5. 在测试中使用Result<T, E>

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.5.1. 测试函数返回值为Result枚举 到目前为止&#xff0c;测试运行失败的原因都是因为触发了panic&#xff0c;但可以导致测试失败的…

【Linux】gawk编辑器

一、基本介绍 相较于sed编辑器来说&#xff0c;gawk提供了一种编程语言&#xff0c;而不仅仅是编辑器命令。 在gawk编程语言中&#xff0c;可以实现以下操作&#xff1a; 定义变量来保存数据&#xff1b;使用算术和字符串运算符来处理数据&#xff1b;使用结构化编程语法&…

Backend - C# asp .net core

目录 一、各大框架理解 &#xff08;一&#xff09;ASP.NET Core &#xff08;二&#xff09;ASP.NET Core Web Application &#xff08;三&#xff09;ASP.NET Core MVC &#xff08;四&#xff09;ASP.NET Core Web API &#xff08;五&#xff09;ASP.NET Core 和 EF …

麦田物语学习笔记:背包物品选择高亮显示和动画

如题,本篇文章没讲动画效果 基本流程 1.代码思路 (1)先用点击事件的接口函数去实现,点击后反转选择状态(isSelected),以及设置激活状态(SetActive),并且还需要判断该格子是否为空,空格子是点不动的,完成后以上后,出现的问题是高亮应该是有且仅有一个格子是高亮的,而现在可以让…

自定义音频播放样式结合Howler.js

滑动式滚动条 不使用audio默认样式 自定义音频播放样式 当前时间 开始时间 结束时间 可播放可暂停 滚动条可拖动进行同步 具体样式可调整npm install howler --save<template><div class"audio-player"><div v-if"isLoading" class"l…

基于 GEE 利用 DEM 数据计算坡度、坡向

目录 1 完整代码 2 运行结果 1 完整代码 以SRTM数据产品为例&#xff0c;代码如下&#xff1a; var roi table; var srtm ee.Image(USGS/SRTMGL1_003); var elevation srtm.select(elevation).clip(roi);// 计算坡度 var slope ee.Terrain.slope(elevation).clip(roi)…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…

夯实前端基础之CSS篇

知识点概览 这一篇是讲CSS的&#xff0c;前面还有一篇总结HTML的哦~夯实前端基础之HTML篇&#xff0c;后面还会更新其他系列哦~ 一、必知必会 1. html中引入样式的几种方式&#xff1f; 内联样式&#xff08;html元素的style属性&#xff09;内部样式表&#xff08;style标签…

conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境&#xff0c;由于要频繁用到各种conda和pip命令&#xff0c;所以再此整理一下。 文章目录 前言&#xff1a;conda虚拟环境总结与解读Conda和pip的理解区别和联系命令格式 conda环境命令查看创建和删除导出与导入激活和退出 包管理命令安装和删除文件批…

协方差矩阵

协方差矩阵是一个对称矩阵&#xff0c;用来描述多个随机变量之间的协方差关系。协方差反映了两个随机变量如何共同变化的趋势&#xff0c;协方差矩阵将这种关系扩展到了多维数据。 1. 定义 假设有一个 n 维随机向量 &#xff0c;协方差矩阵 Σ 定义为&#xff1a; 其中&#…

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下&#xff0c;是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下&#xff0c;会导致接口占用大量的服务器资源&#xff0c;使得接口响应效率的降低或者超时&#xff0c;更或者导致服务器宕机。 限流是指对应用服务进行限制…