本文将系统地介绍 ELK(Elasticsearch、Logstash、Kibana)在项目中的应用,各自扮演了什么样的角色,以及如何配置索引、Logstash 等。
Logstash
我们将用 Logstash 模拟整个天气指标数据的采集过程,首先我们将会对 Logstash 做一个简单的讲解,然后举几个例子,最后应用到天气数据采集过程中。
Logstash 是一款开源优秀的数据采集工具,数据源可以是控制台的标准输入、日志文件、Kafka 等,中间由过滤器对采集的数据进一步处理,然后由输出插件将结果输出到 ES,或者 Kafka。
Logstash 采集数据基本流程如下:
# 输入
input {
...
}
# 过滤器
filter {
...
}
# 输出
output {
...
}
同样我们使用 Docker 作为平台来运行测试 Logstash。因为 Docker 跨平台,所以你不需要学习如何在 Linux、Windows、Mac 上配置,另外还不会污染了当前系统的环境。使用 Docker 随用随启动,不用就丢掉。也不用刻意去学习 Docker,当做一个方便的虚拟机使用就是了,言归正传。
进入到控制台,拉取 Logstash 镜像:
docker pull docker.elastic.co/logstash/logstash:7.1.1
查看镜像 ID 启动容器:
启动容器,并使用 bash 命令进入:
docker run --rm -it --name logstash b0cb1543380d bash
进入到容器中,可以看到 Logstash 的目录结构:
bash-4.2$ ls -l
total 888
drwxrwsr-x 2 logstash root 4096 May 23 2019 bin
drwxrwsr-x 1 logstash root 4096 May 23 2019 config
-rw-rw-r-- 1 logstash root 2276 May 23 2019 CONTRIBUTORS
drwxrwsr-x 2 logstash root 4096 May 23 2019 data
-rw-rw-r-- 1 logstash root 4119 May 23 2019 Gemfile
-rw-rw-r-- 1 logstash root 22491 May 23 2019 Gemfile.lock
drwxrwsr-x 6 logstash root 4096 May 23 2019 lib
-rw-rw-r-- 1 logstash root 13675 May 23 2019 LICENSE.txt
drwxrwsr-x 4 logstash root 4096 May 23 2019 logstash-core
drwxrwsr-x 3 logstash root 4096 May 23 2019 logstash-core-plugin-api
drwxrwsr-x 4 logstash root 4096 May 23 2019 modules
-rw-rw-r-- 1 logstash root 808305 May 23 2019 NOTICE.TXT
drwxr-sr-x 1 logstash root 4096 May 23 2019 pipeline
drwxrwsr-x 3 logstash root 4096 May 23 2019 tools
drwxrwsr-x 4 logstash root 4096 May 23 2019 vendor
drwxrwsr-x 9 logstash root 4096 May 23 2019 x-pack
pipeline 目录是用来配置,输出 -> 过滤 -> 输出插件,这里我们将配置一个控制台输入输出作为一个简单使用的 Demo。
进入到 pipeline 目录,修改 logstash.conf 文件,配置输入是 stdin,输出是 stdout。
/usr/share/logstash/pipeline
input {
stdin {
}
}
output {
stdout {
}
}
进入到 bin 目录执行 ./logstash 启动完成之后,就会提示输出,输出 hello word
后,黄色部分为输出。这是一个简单的 Logstash pipeline 案例。
Elasticsearch
weather_monitor 索引 Mapping 关系如下。我们要根据需求对 Mapping 进行修改,目的是优化 ES 内存,让 mapping 变的更简单。首先 city、weather 配置成 keyword,去掉 text 类型节约内存。另外最好把 dynamic 设置成 false。
{
"mapping": {
"properties": {
"city": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"temperature": {
"type": "long"
},
"timestamp": {
"type": "date"
},
"weather": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
新建一个索引 weather_monitor_new,如果要重新建 mapping 必须要新建一个索引,然后通过 reindex 接口进行重新把数据索引起来,这里我们不使用 reindex,将会结合 Logstash 重新将数据导入。
网友评论