ELK的安装部署与使用

news2024/10/7 8:30:02

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,根据自定义动态添加字段

在这里插入图片描述

配置内容如下

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

[外链图片转存中…(img-ujTG21Kv-1684376256531)]

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

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

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

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

相关文章

基于相似加权自组装框架的低质量少样本MRI脑卒中病变分割

文章目录 Stroke Lesion Segmentation from Low-Quality and Few-Shot MRIs via Similarity-Weighted Self-ensembling Framework摘要本文方法Soft Distribution-aware Updating (SDU) 实验结果 Stroke Lesion Segmentation from Low-Quality and Few-Shot MRIs via Similarity…

蓝桥杯模块学习5——按键

第一章 硬件部分 1.1 电路的组成部分 1.1.1 按键电路 原理图&#xff1a; 功能&#xff1a; &#xff08;1&#xff09; J5&#xff1a;当1和2相接&#xff0c;电路就变成一个4*4的矩阵键盘电路&#xff1b;当2和3相接时&#xff0c;电路变成了一个S4-S7的独立按键&#xf…

平板触控笔要原装的吗?苹果平替笔性价比高的推荐

与苹果的电容笔不同&#xff0c;市场上的电容笔只会给人一种倾斜的压感&#xff0c;并不会像苹果的电容笔那样&#xff0c;可以给人一种重力的压感。不过&#xff0c;如果你不一定要画画&#xff0c;那你就不用花很多钱去买一支苹果的原装电容笔了&#xff0c;只需一支平替电容…

ss命令使用详解

ss是Socket Statistics的缩写。顾名思义&#xff0c;ss命令可以用来获取socket统计信息&#xff0c;它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息&#xff0c;而且比netstat更快速更高效。 当服务器的socket连接数量变得非常大…

从小白到专家:如何在营销中利用 AI 的力量

欢迎来到营销的未来&#xff0c;时至今日人工智能和人类专业知识以前所未有的方式结合在一起。 认识ChatGPT&#xff0c;这是改变游戏规则的革命性工具。 借助ChatGPT&#xff0c;你最终将能够利用AI的力量做出明智的、数据驱动的决策来满足你的受众需求。 但ChatGPT不仅仅是…

[高光谱]高光谱数据的获取与展示

一、环境准备 需要安装spectral包&#xff0c;这个包专门用于高光谱数据展示。 pip install spectral 二、数据加载 要预先准备原始高光谱的.mat数据和分类数据gt.mat(ground-turth)&#xff1b;然后使用scipy.io中的loadmat(.)将其读入程序。 from scipy.io import loadmat…

JCJC句子改写在线工具上线-202305

JCJC句子改写在线工具上线-202305 字根科技发布了新版JCJC在线句子改写功能。 使用网址&#xff1a; JCJC在线句子改写 新版的在线中文句子改写一共分为三种模式&#xff1a; 严谨模式普通模式休闲模式 上述三种改写模式适用于不同的改写需求&#xff0c;界面展示如下&…

springboot读取和写入csv文件数据

前言 csv格式的表格&#xff0c;和xls以及xlsx格式的表格有一些不同&#xff0c;不能够直接用处理xls的方式处理csv&#xff1b; 以下我将介绍如何读取并写入csv数据 准备工作 要处理csv格式的表格数据&#xff0c;我们首先需要引入pom.xml的依赖 <dependency><art…

Linux如何实现动态IP

Linux系统可以通过DHCP&#xff08;动态主机配置协议&#xff09;来实现动态IP。DHCP是一种自动分配IP地址的协议&#xff0c;它可以自动为网络中的设备分配IP地址、子网掩码、网关等网络参数&#xff0c;从而实现动态IP。 在Linux系统中&#xff0c;可以使用DHCP客户端工具来…

分享个常用的跨境电商数据分析平台

在跨境电商人眼中&#xff0c;适合用在跨境电商数据分析上的大数据分析平台该是怎样的&#xff1f;是效率高、财务指标计算快、业务能随时自助分析&#xff0c;最好是能将平台自身的分析经验分享给跨境电商企业&#xff0c;为企业提供更专业的服务。这样的大数据分析平台虽然少…

【Prometheus】实战Prometheus部署

目录 架构安装部署Exporters 架构 Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口并符合Prometheus定义的数据格式&#xff0c;就可以介入Prometheus监控 Prometheus Server负载定时在目标上抓取metrics(指标)数据&…

chatgpt-最常报错Access denied

一、问题 Access denied 的原因基本都是由于 IP 地址&#xff0c;例如我们用国内网络直接访问 ChatGPT 官网就会报错 Access denied&#xff08;访问被拒绝&#xff09;&#xff0c;Error reference number 1020&#xff08;错误参考编号&#xff1a;1020&#xff09; 二、原因…

Nginx(一)---Nginx下载及安装

一.初识Nginx Nginx 是一个功能强大的 Web 服务器和反向代理服务器。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx网站用户有&#xff1a;百度、京东、新浪、网易、腾讯、淘宝…

在Windows中如何使用工具恢复已删除的文件?

​当你的电脑遇到任何类型的数据丢失问题时&#xff0c;傲梅恢复之星都会帮助你。你可以在Windows 11/10/8/7中快速轻松的从HDD/SSD恢复丢失或删除的数据。 傲梅恢复之星功能 易于使用&#xff1a;你可以通过3个简单易行的步骤轻松恢复丢失的数据。 适合多种数据丢失情况&a…

787. K 站中转内最便宜的航班

有 n 个城市通过一些航班连接。给你一个数组 flights &#xff0c;其中 flights[i] [fromi, toi, pricei] &#xff0c;表示该航班都从城市 fromi 开始&#xff0c;以价格 pricei 抵达 toi。 现在给定所有的城市和航班&#xff0c;以及出发城市 src 和目的地 dst&#xff0c;…

LPP 和 Kernel LPP

无监督度量学习的降维讲义:LPP Lecture notes in dimensionality reduction for unsupervised metric learning: LPPLECTURE 6: LOCALITY PRESERVING PROJECTIONS AND KERNEL LPP A. Kernel LPP Lecture notes in dimensionality reduction for unsupervised metric learning: …

DHCP数据包分析

目录 1、DHCP 2、DHCP报文种类 3、DHCP工作原理 4、DHCP报文格式 1、DHCP DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;&#xff0c;前身是BOOTP协议&#xff0c;是一个局域网的网络协议&#xff0c;使用UDP协议工作&am…

国产手机无奈放弃芯片研发,关键还是芯片制造,前路在何方?

OPPO放弃芯片研发&#xff0c;影响仍然在继续&#xff0c;这引发了各方对国产芯片发展方向的思考&#xff0c;那么如果不是OPPO&#xff0c;其他国产芯片企业又能突破困境么&#xff1f;其实关键还是在芯片制造。 国内最强大的芯片企业&#xff0c;由于众所周知的原因&#xff…

ChatGPT联网后几大功能

这周ChatGPT plus 已经可以联网了&#xff0c;联网后对我们的用处更大了&#xff0c;这里总结了几点ChatGPT联网 后的几个功能&#xff1a; 1.对给定的网页进行读取&#xff0c;并根据解读后来回答问题 给ChatGPT一个网址&#xff0c;让他总结一下这个网址&#xff0c;不到一…

Java 中 CAS 是什么,有哪些实际应用场景

CAS 是什么 CAS&#xff08;Compare And Swap&#xff09;是一种并发编程中的原子操作&#xff0c;用于实现多线程之间的同步。在 Java 中&#xff0c;CAS 操作通过 sun.misc.Unsafe 类实现。 CAS 操作是一种乐观锁机制&#xff0c;它假设对于共享变量的修改操作不会引起冲突…