ELK的安装部署与使用

ELK的安装与使用

安装部署

部署环境:Elasticsearch-7.17.3 Logstash-7.17.3 Kibana-7.17.3

一、安装部署Elasticsearch

  1. 解压目录,进入conf目录下
  2. 编辑elasticsearch.yml文件,输入以下内容并保存
network.host: 127.0.0.1
http.port: 9200
# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"

3.进入bin目录,点击elasticsearch.bat文件启动项目

二、安装部署Logstash

文件配置

在conf目录下新建logstash.conf

input {
    stdin {
    }
    jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
  	   # mysql驱动所在位置
      jdbc_driver_library => "D:\ELK\mysql-connector-java-8.0.11.jar"
      #sql执行语句
	  statement => "SELECT * FROM user"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
    }
}
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "goods"
        # 文档_id,%{goods_id}意思是取查询出来的goods_id的值,并将其映射到shop的_id字段中
        # 文档_id,%{goodsId}如果是别名,意思是取查询出来的goodsId的值,并将其映射到shop的_id字段中
        document_id => "%{goodsId}"
    }
    stdout {
        codec => json_lines
    }
}

遇到问题与解决

①JAVA_HOME环境找不到,不推荐使用JAVA_HOME变量名

系统找不到指定的路径。could not find java; set JAVA_HOME or ensurejava is in PATH D: ELK logstash-?.17.3 bin>

解决方法:

新增JDK环境变量:命名为 LS_JAVA_HOME

将jdk路径复制进去,注意!!!JDK版本必须1.8以上

②报以下错误

在这里插入图片描述

解决办法:

在bin目录下新建文件:logstash.conf

设置logstash.conf的值,或指定路径下的conf文件

input {
	stdin{
	}
}

output {
	stdout{
	}
}

启动logstash,进入bin目录下的cmd,输入以下命令

logstash -f logstash.conf

安装部署Kibana

进入config目录将kibana.yml文件修改

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"

SpringBoot集成Logstash收集日志

1、导入依赖

在pom.xml文件导入以下依赖

<!--集成logstash-->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.3</version>
        </dependency>

2、配置文件

新建"logback-spring.xml"文件,并编写内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--设置指定路径下的发送地址,端口号设置为4560-->
        <destination>localhost:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <!--配置根路径下日志级别-->
    <root level="INFO">
        <appender-ref ref="LOGSTASH" />
    </root>
</configuration>

3、配置application.yml文件

进入application.yml文件配置日志

logging:
  level:
    root: info
  config: classpath:logback-spring.xml

4、配置logstash下的logstash.conf文件

input{
	tcp{
		mode => "server"
		host => "127.0.0.1"
		port => 4560
		codec => json_lines
	}
}
output{
	elasticsearch{
		action => "index"
		hosts => "localhost:9200"
		index => "springboot_log-%{+YYYY.MM.dd}"
	}
}

以上配置完启动可运行成功

5、配置Logstash日志保存到数据库

Linux配置这里就不提了,网上很多。这里讲的是windows系统下的配置,并以MySQL数据库为例。

使用的是jdbc,由于Logstash默认不带jdbc,所以需要下载logstash-output-jdbc,在线下载方式:进入logstash的bin目录下输入以下命令:

logstash-plugin install --no-verify logstash-output-jdbc

若安装失败,则去百度找一个压缩包下载(小编是在百度网盘上面下载的)

下一步是采用不联网的安装方式:进入logstash的bin目录下输入以下命令:

logstash-plugin install file://文件路径+压缩包全名,以'/'分隔

若还是安装失败,则需要更改配置文件

在logstash根目录下的Gemfile文件修改以下配置

source "https://gems.ruby-china.com"

重新进入logstash的bin目录下输入以下命令

logstash-plugin install file://文件路径+压缩包全名,以'/'分隔

网上下载mysql驱动,譬如mysql-connector-java-8.0.11.jar

下载后在logstash下的vendor目录下新建jar目录,再进入jar目录新建jdbc目录

将mysql驱动包放到jdbc目录下,全局路径如下:logstash-7.17.3目录为安装模块

logstash-7.17.3\vendor\jar\jdbc\mysql-connector-java-8.0.11.jar          

譬如springboot下的日志内容为

log.info(“|”+“version内容”+“|”+“taskId内容”+“|”+“taskType内容”+“|”+“data内容”+“|”+“time内容”)

重新进入logstash.conf文件,编辑以下内容

input{
	tcp{
		mode => "server"
		host => "127.0.0.1"
		port => 4560
		codec => json_lines
	}
}
filter{
	mutate{
		split => ["message","|"]
	}
	if[message][2]{
			mutate{
				add_field =>{
					"version" => "%{[message][2]}"
				}
			}
		}
		if[message][3]{
			mutate{
				add_field =>{
					"taskId" => "%{[message][3]}"
				}
			}
		}
		if[message][4]{
			mutate{
				add_field =>{
					"taskType" => "%{[message][4]}"
				}
			}
		}
		if[message][5]{
			mutate{
				add_field =>{
					"data" => "%{[message][5]}"
				}
			}
		}
		if[message][6]{
			mutate{
				add_field =>{
					"time" => "%{[message][6]}"
				}
			}
		}
		mutate{
			convert => {
				"version" => "string"
				"taskId" => "string"
				"taskType" => "string"
				"data" => "string"
				"time" => "string"
			}
		}
}
output{
	driver_class => "com.mysql.cj.jdbc.Driver"
					connection_string => "jdbc:mysql://127.0.0.1:3306/student?user=用户名&password=密码&serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false&autoReconnect=true"
					statement => ["insert into 表名 (version,taskId,taskType,data,time) VALUES (?,?,?,?,?)","version","taskId","taskType","data","time"]
}

6、区分业务日志和错误日志存储

add_tag 属性,在input添加,用于区分输出

具体内容就不详细介绍了,看下面小编写的内容

input {
	tcp {
		mode => "server"
		host => "127.0.0.1"
		port => 4560
		codec => json_lines
	}
}
filter{
	mutate{
		split => ["message","|"]
	}
	if[message][1] == "business_log"{
		mutate{
			add_tag =>["business_log"]
		}
	}
	if[message][1]== "error_log"{
		mutate{
			add_tag => ["error_log"]
		}
	}
	if[message][2]=="ElasticSearch"{
		mutate{
			add_tag => ["ElasticSearch"]
		}
	}
	if[message][2]=="MYSQL"{
		mutate{
			add_tag => ["MySQL"]
		}
	}
	if[message][2]=="PgSQL"{
		mutate{
			add_tag => ["PgSQL"]
		}
	}
	if[message][2]=="ElasticSearchMySQL"{
		mutate{
			add_tag => ["ElasticSearchAndMySQL"]
		}
	}
	if[message][2]=="ElasticSearchPgSQL"{
		mutate{
			add_tag => ["ElasticSearchAndPgSQL"]
		}
	}
	if [level] == "INFO"{
		if[message][3]{
			mutate{
				add_field =>{
					"version" => "%{[message][3]}"
				}
			}
		}
		if[message][4]{
			mutate{
				add_field =>{
					"taskId" => "%{[message][4]}"
				}
			}
		}
		if[message][5]{
			mutate{
				add_field =>{
					"taskType" => "%{[message][5]}"
				}
			}
		}
		if[message][6]{
			mutate{
				add_field =>{
					"data" => "%{[message][6]}"
				}
			}
		}
		if[message][7]{
			mutate{
				add_field =>{
					"time" => "%{[message][7]}"
				}
			}
		}
		mutate{
			convert => {
				"version" => "string"
				"taskId" => "string"
				"taskType" => "string"
				"data" => "string"
				"time" => "string"
			}
		}
	}
}
output {
	if [level] == "INFO"{
		if "business_log" in [tags]{
			if "ElasticSearch" in [tags]{
				elasticsearch {
					action => "index"
					hosts => "localhost:9200"
					index => "business_log-%{+YYYY.MM.dd}"
				}
			}
			else if "MySQL" in [tags]{
				jdbc{
					driver_class => "com.mysql.cj.jdbc.Driver"
					connection_string => "jdbc:mysql://127.0.0.1:3306/student?user=root&password=root&serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false&autoReconnect=true"
					statement => ["insert into business_log (version,taskId,taskType,data,time) VALUES (?,?,?,?,?)","version","taskId","taskType","data","time"]
				}
			}
		}
		else if "error_log" in [tags]{
			if "ElasticSearch" in [tags]{
				elasticsearch {
					action => "index"
					hosts => "localhost:9200"
					index => "business_error_log-%{+YYYY.MM.dd}"
				}
			}
		}
	} 
	else if [level] == "ERROR"{
		elasticsearch {
			action => "index"
			hosts => "localhost:9200"
			index => "sys_error_log-%{+YYYY.MM.dd}"
		}
	}
}

配置30天删除日志记录

需求;每天都记录日志,但是考虑到日志文件存储占用内容,所以将30天前的日志文件删除掉

通过以上的配置已经配置好每天都会创建新的日志文件

思考:

①使用Kibana配置删除策略,对日志单独配置处理

②配置创建日志同时配置日志的删除策略

http://127.0.0.1:5601 命令进入Kibana

在这里插入图片描述

手动选择策略

若需要自定义策略,可以创建策略,如以下操作
在这里插入图片描述

进入索引管理,添加策略
在这里插入图片描述
在这里插入图片描述

以上步骤后,实现了指定的索引选择对应是策略

配置自动创建策略

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

配置内容如下

{
  "index": {
    "lifecycle": {
      "name": "30-days-default",
      "rollover_alias": ""
    },
    "routing": {
      "allocation": {
        "include": {
          "_tier_preference": "data_content"
        }
      }
    },
    "number_of_shards": "1",
    "auto_expand_replicas": "0-1",
    "number_of_replicas": "1"
  }
}

配置完点击"Next"

选择Dynamic templates,根据自定义动态添加字段

在这里插入图片描述

然后点击"Next",逐个点击下一步,最后创建成功。。成功实现了以上的功能

若报错内容如下:

illegal_argument_exception: setting [index.lifecycle.rollover_alias] for index [sys_error_log-2023.05.16] is empty or not defined

更改 策略配置信息
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

问题解决

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

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

相关文章

计算机网络实验(ensp)-实验10:三层交换机实现VLAN间路由

目录 实验报告&#xff1a; 实验操作 1.建立网络拓扑图并开启设备 2.配置主机 1.打开PC机 配置IP地址和子网掩码 2.配置完成后点击“应用”退出 3.重复步骤1和2配置每台PC 3.配置交换机VLAN 1.点开交换机 2.输入命名&#xff1a;sys 从用户视图切换到系统视图…

Jenkins版本升级

Jenkins版本过低的时候&#xff0c;一些插件无法升级&#xff0c;会引发一系列错误&#xff0c;这个时候我们就要升级版本了 一、下载更新包 第一种方式&#xff1a;Jenkins页面下载最新包 第二种官网上下载war包(Jenkins官网) 二、打开服务器搜索jenkins.war路径 1、如果Jenk…

SQL Backup Master 6.3.6 Crack

SQL Backup Master 能够为用户将 SQL Server 数据库备份到一些简单的云存储服务中&#xff0c;例如 Dropbox、OneDrive、Amazon S3、Microsoft Azure、box&#xff0c;最后是 Google Drive。它能够将数据库备份到用户和开发者的FTP服务器上&#xff0c;甚至本地机器甚至网络服务…

这几款实用的电脑软件推荐给你

软件一&#xff1a;TeamViewer TeamViewer是一款跨平台的远程控制软件&#xff0c;它可以帮助用户远程访问和控制其他计算机、服务器、移动设备等&#xff0c;并且支持文件传输、会议功能等。 TeamViewer的主要功能包括&#xff1a; 远程控制&#xff1a;支持远程访问和控制…

HANTS时间序列滤波算法的MATLAB实现

本文介绍在MATLAB中&#xff0c;实现基于HANTS算法&#xff08;时间序列谐波分析法&#xff09;的长时间序列数据去噪、重建、填补的详细方法。 HANTS&#xff08;Harmonic Analysis of Time Series&#xff09;是一种用于时间序列分析和插值的算法。它基于谐波分析原理&#x…

自学黑客(网络安全)有哪些技巧——初学者篇

很多人说&#xff0c;要想学好黑客技术&#xff0c;首先你得真正热爱它。 热爱&#xff0c;听着多么让人激情澎湃&#xff0c;甚至热泪盈眶。 但很可惜&#xff0c;“热爱”这个词对还没入门的小白完全不管用。 如果一个人还没了解过你就说爱你&#xff0c;不是骗财就是骗色…

asp.net高校运动会管理系统的设计与实现

本高校运动会管理系统是针对我院当前运动会工作需要而开发的B/S模式的网络系统&#xff0c;涉及到运动会赛前的报名录入准备与分组编排、赛中的成绩处理、赛后的成绩汇总与团体总分的统计。它将是一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的高校运动…

Word怎么生成目录?4个方法快速生成目录!

案例&#xff1a;Word怎么生成目录 【想问下大家在使用Word时是怎么生成目录的呀&#xff1f;正在写毕业论文的我真的很急&#xff01;感谢&#xff01;】 Word作为我们常用的办公软件&#xff0c;为我们的提供了很多便利。生成目录是在Word文档中创建一个方便导航的索引。 …

Word怎么转换成PDF免费?分享适合你的Word转PDF方法

随着数字化时代的到来&#xff0c;将文件转换为PDF格式已经成为一个常见的需求。PDF文件格式的广泛应用使其在各个领域都非常重要&#xff0c;而Word文档则是最常见的文件类型之一。因此&#xff0c;将Word转换为PDF的方法备受关注。在下面&#xff0c;我将分享一种适合任何人使…

Android Service 使用

在Android应用开发中&#xff0c;Service是一种非常重要的组件。Service可以在后台执行长时间运行的任务&#xff0c;例如播放音乐、下载文件等。在本文中&#xff0c;我将会介绍如何使用Service组件&#xff0c;并通过代码实现来说明它的作用。 Android Service概述 在Androi…

如何为博客选择目标受众(+例子)

要创建免费网站和博客&#xff1f;从易服客建站平台开始 500M免费空间&#xff0c;可升级为20GB电子商务网站 创建免费网站 您是否正在寻找为您的博客选择目标受众的最佳实践&#xff1f; 选择目标受众可以让您创建更好的内容&#xff0c;引起用户的共鸣。这有助于您获得更…

【PDF软件篇】PDF轻量化电子笔记编辑利刃-Xodo软件优化

【PDF软件篇】PDF轻量化电子笔记编辑利刃-Xodo软件优化 默认配置已经够强&#xff0c;但是我还是推荐自定义&#xff0c;适合自己的就是最好的—【蘇小沐】 文章目录 【PDF软件篇】PDF轻量化电子笔记编辑利刃-Xodo软件优化1.实验环境 &#xff08;一&#xff09;日常办公导出无…

以SpringMVC入门案例分析服务器初始化过程、单次请求流程

文章目录 1&#xff0c;SpringMVC概述2&#xff0c;SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器…

三分钟挖掘快速软件开发框架提高办公效率的秘诀

在科技日新月异的当今社会&#xff0c;学会利用快速软件开发框架&#xff0c;可以给企业带来更大的便利和市场价值。因为它拥有可视化设计、灵活简便、易操作、易上手等优势特点&#xff0c;在助推企业实现数字化转型的过程中有着举足轻重的作用。那么&#xff0c;快速软件开发…

编译原理笔记(一)引论

文章目录 1.什么是编译程序2.编译过程和编译程序的结构2.1.编译过程概述2.2.编译程序的结构2.3.编译阶段的组合 3.解释程序和一些软件工具3.1.解释程序3.2.处理源程序的软件工具 4.PL/0语言编译系统 学习总结&#xff1a;这一部分是编译原理的绪论部分内容&#xff0c;对编译程…

网络分析和机器学习

文章目录 网络分析1.Introduction to networks and graph foundations and algorithmsNetwork types (social/bio/comp), Euler/Hamilton, Graphs (matrix/adj)Breadth-first search (shortest paths), Depth-first search (conn. compnts) 2. Emergent global / local network…

Trie与可持久化Trie

Trie Trie&#xff0c;也称为字典树或前缀树&#xff0c;是一种用于高效存储和检索字符串的树形数据结构。它的主要特点是利用字符串的公共前缀来减少存储空间和提高查询效率。下面是对 Trie 的常见操作的介绍&#xff1a; 插入&#xff08;Insertion&#xff09;&#xff1a…

Deformable DETR 论文学习

1. 解决了什么问题&#xff1f; DETR 去除了目标检测算法中的人为设计&#xff0c;取得了不错的表现。但是其收敛速度很慢&#xff0c;对低分辨率特征识别效果差&#xff1a; 模型初始化时&#xff0c;注意力模块给特征图上所有的像素点分配的权重是均匀的&#xff0c;就需要…

元宇宙应用领域-工业

元宇宙是指虚拟空间的总称&#xff0c;在这个虚拟空间中&#xff0c;用户可以像在现实世界一样&#xff0c;通过虚拟现实技术进行交互和体验。元宇宙应用领域非常广泛&#xff0c;如工业、游戏、娱乐、教育、医疗、房地产等。 工业领域中&#xff0c;元宇宙可用于在设计阶段帮…

物联网应用普及正在改变我们的生活

物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;指的是通过互联网连接各种物品、设备和传感器&#xff0c;实现物品之间的互联互通&#xff0c;形成智能化、自动化的数据交互和服务体系。简单来说&#xff0c;就是将各类物品通过互联网连接&#xff0c;实现互…