ELK 是 ElasticSearch、Logstash、Kibana 的简称。
本文记录了安装 ElasticSearch、Logstash、Kibana,并将 MySql 中的数据,同步至 ES 中。
版本信息
ElasticSearch 7.14.2:引擎本身
ES Plugins:IK 中文分词 7.14.2 (Github)
ES Plugins:拼音 7.14.2 (Github)
Logstash 7.14.2:从各种数据源(如:MySql、日志、等等),将数据同步至 ElasticSearch 中
Kibana 7.14.2:可视化管理 ElasticSearch
【ElasticSearch】
在 Docker 注册表中,下载 ElasticSearch 7.14.2 镜像。
端口说明
9200:浏览器访问的端口,其它程序访问 ES,也使用此端口,HTTP 协议
9300:ES 集群中,各节点的访问端口,TCP 协议
对 ES 做路径映射时,需要注意:data
和 logs
目录,在宿主目录上要添加写入权限,为了方便,都添加了 everyone 的写入权限,路径映射如下:
文件夹映射:数据文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/elasticsearch/data
文件夹映射:日志文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/elasticsearch/logs
文件夹映射:插件文件夹 <宿主文件夹> : /usr/share/elasticsearch/plugins
路径映射,如图所示:
设置环境变量(全部参数配置),简单配置,如下所示:
node.name = test-es
discovery.type = single-node
ES_JAVA_OPTS = -Xms512m -Xmx512m
环境变量,如图所示:
上述内容都设置好后,就可以直接创建并运行容器了。
接下来,安装 中文分词 和 拼音 插件。
打开上面的插件链接,直接下载相应版本的 zip 包(和 ES 版本一致,不用下载源码)。
在宿主的 plguins 路径下,新建两个目录:ik、pinyin。
将 zip 包解压到相应的目录。
然后,重启 ES 容器,插件就安装成功了。
至此,ElasticSearch 就安装并运行成功了,可以打开浏览器,访问:
http://<宿主机 IP>:<端口(默认:9200)> // 查看 ES 的基本信息(json 格式)
插件安装好后,可用 Postman 测试,方法如下:
ik 分词测试
POST 访问:http://
: /_analyze
// body 内容(json 格式)
{
"analyzer": "ik_smart",
"text": "中文内容"
}
ik 分词结果如下图:
拼音测试,参考 Github
【Kibana】
在 Docker 注册表中,下载 Kibana 7.14.2 镜像。
端口说明
5601:浏览器访问的端口,HTTP 协议
对 Kibana 做路径映射时,需要注意:data
目录,在宿主目录上要添加写入权限,为了方便,都添加了 everyone 的写入权限,路径映射如下:
文件夹映射:数据文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/kibana/data
路径映射,如图所示:
设置环境变量(全部参数配置),如下所示:
ELASTICSEARCH_HOSTS = http://:
SERVER_NAME = test.kibana
环境变量,如图所示:
至此,Kibana 就安装并运行成功了,可以打开浏览器,访问:
http://:<端口(默认:5601)>
【Logstash】
在 Docker 注册表中,下载 Logstash 7.14.2 镜像。
端口说明
5044:beats 的默认端口
9600:浏览器访问的端口
对 Logstash 做路径映射时,需要注意:config
、data
、logs
目录,在宿主目录上要添加写入权限,为了方便,都添加了 everyone 的写入权限,路径映射如下:
文件夹映射:配置文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/logstash/config
文件夹映射:数据文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/logstash/data
文件夹映射:日志文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/logstash/logs
文件夹映射:通道文件夹 <宿主文件夹> : /usr/share/logstash/pipeline
// 在 Docker 中各种驱动库的路径映射,这里只演示 MySql
文件夹映射:jar文件夹 <宿主文件夹> : /usr/share/logstash/jar
MySql 的驱动库,可以到 官网下载,如图所示:
下载 zip 包后,解压得到 mysql-connector-java-8.0.27.jar
,上传到宿主机的 jar 目录中。
宿主机中的目录配置:
config 目录
准备四个文件(UTF-8 格式):
- jvm.options:空文件
- log4j2.properties:空文件
- logstash.yml:logstash 的主要配置文件(见下)全部参数
- pipelines.yml:指定从其它数据源同步的路径文件(见下)配置说明
# logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
# 多个 ES 用英文逗号隔开
xpack.monitoring.elasticsearch.hosts: ["http://:"]
# pipelines.yml
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline"
- pipeline.id: user
path.config: "/usr/share/logstash/pipeline/user.conf"
pipeline 目录
可添加多个 conf 文件(UTF8 格式)
- logstash.conf:默认文件(见下)
- user.conf:自建文件,用于同步 MySql 中的 User 表到 ES 中(见下)
# logstash.conf
input {
beats {
port => 5044
}
}
output {
stdout {
codec => rubydebug
}
}
# user.conf
# 数据源(MySql)
input {
jdbc {
# 刚刚下载的 MySql 的访问库
jdbc_driver_library => "/usr/share/logstash/jar/mysql-connector-java-8.0.27.jar"
# MySql 访问库的驱动声明(注意 Java 版本)
# mysql-connector-java 5
# jdbc_driver_class => "com.mysql.jdbc.Driver"
# mysql-connector-java 6
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
# MySql 连接地址和数据库(Schema)
jdbc_connection_string => "jdbc:mysql://:/"
jdbc_user => ""
jdbc_password => ""
# 同步时间规则,遵循 crontab 调度(CORN 表达式说明见下)
schedule => "* * * * *"
# 待执行的 SQL 语句,变量用英文冒号开头,sql_last_value 是内置的变量
statement => "SELECT * FROM `user` WHERE `id` >= :sql_last_value"
# 是否使用递增列的值
use_column_value => true
# 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
tracking_column_type => "numeric"
# 递增列的名称
tracking_column => "id"
# 同步点文件,该文件记录了上次的同步点,重启时会读取改文件,该文件可手动修改
last_run_metadata_path => "syncpoint_table"
}
}
# ElasticSearch
output {
elasticsearch {
# 多个 ES 用英文逗号隔开
hosts => [":"]
# 自定义索引名称
index => "user"
# 需要关联的数据库中有有一个 id 字段,对应类型中的 id
document_id => "%{id}"
document_type => "user"
}
stdout {
# JSON 格式输出
codec => json_lines
}
}
注:关于 CORN 表达式,可 参考这里。
至此,Logstash 就安装并运行成功了,可以打开浏览器,访问:
http://:<端口(默认:9600)>
全文结束