ELK实战笔记


一. 简介

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

在elasticsearch中,所有节点的数据是均等的。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

二. 安装

windows下安装的docker

1. elasticsearch

#下载elasticsearch镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.0.0 # 创建并运行elasticsearch容器

# 5601是kibana的默认端口,9200是es的默认端口,discovery.type指定单节点模式

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.0.0

注:也可以使用elasticsearch的9200端口,直接post数据

2. kibana

(windows版本可行)

# 创建并运行kibana

docker pull docker.elastic.co/kibana/kibana:7.0.0

# -e ELASTICSEARCH_URL指定es的地址,--network指定使用es的网络,可以借用es开放的5601端口 docker run -it -d -e ELASTICSEARCH_URL=http://localhost:9200 --name kibana -p 5601:5601kibana:tag

https://www.elastic.co/cn/products/kibana

注:笔者安装后总是有问题,干脆就弄一个windows版本的,就好了

https://www.elastic.co/cn/downloads/kibana

下载完后,直接运行  bin\kibana.bat 即可

3. Logstash (windows版本为例)

https://www.elastic.co/cn/downloads/logstash

启动脚本示例:

logstash -f logstash.conf

3.1. 配置

input {
	redis {
		type => "JasonLog"
		host => "10.10.14.54"

		#
		password => '123456'
		port => "6379"
		db => "0"
		data_type => "list"
		key => "ExceptionLog"
	}
}

#过滤
filter {
	mutate {
		gsub => [
			#replace all forward slashes with underscore
			# "message", "\\\"", "\"",
			"message", "\\\"", "\""
		]
	}

	date {
		# 这里是如果createtime跟后面的格式匹配上了就会去替换, 替换什么呢? 
		# target默认指的就是 @timestamp, 所以就是以client_time的时间更新 @timestamp的时间
		match => ["CreateTime", "yyyy-MM-dd HH:mm:ss.SSS"]
	}
}

output {
	if [type] == "JasonLog" {
		elasticsearch {
			hosts => ["http://10.8.100.88:9200"]
			index => "jason_log"
		}
	}
}

问题1. could not find java; set JAVA_HOME or ensure java is in PATH

解决方案:

安装最新版Java kit

配置系统变量

注:不要加bin

三. 配置

3.1. 数据录入到elasticsearch

使用C#

CreateTime = jsonLogMessage.Time.ToUniversalTime().ToString("O"), // 需要转换,否则ES不能识别为Date类型

或者转换为毫秒数

加入示例代码

3.2. 配置数据源

选择时间字段

3.3. 配置字段

设置日期字符串的格式

配置枚举

截取字符串

3.4. 各种图表的配置

1. 图表

2. 面板

3.5. 查询界面

1. 查询条件

2. 禁用某个条件

3. 查看日志上下文

可以查看当前日志发生时间前后的日志

TODO:过期的数据删除策略

四. 快速搭建一个日志中心(未完待续)

架构

数据传入到Redis

附录:

Kibana使用说明: https://www.elastic.co/guide/cn/kibana/current/introduction.html

https://www.cnblogs.com/landanjun/p/10791339.html