群晖NAS的Docker组件上安装ELK(单节点)

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 做路径映射时,需要注意:datalogs 目录,在宿主目录上要添加写入权限,为了方便,都添加了 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://<ES 宿主机 IP>:<ES 端口(默认:9200)>/_analyze

// body 内容(json 格式) { "analyzer": "ik_smart", "text": "中文内容" } 

ik 分词结果如下图:

【Kibana】

在 Docker 注册表中,下载 Kibana 7.14.2 镜像。

端口说明
5601:浏览器访问的端口,HTTP 协议

对 Kibana 做路径映射时,需要注意:data 目录,在宿主目录上要添加写入权限,为了方便,都添加了 everyone 的写入权限,路径映射如下:

文件夹映射:数据文件夹 <宿主文件夹(添加 everyone 写入权限)> : /usr/share/kibana/data 

路径映射,如图所示:

ELASTICSEARCH_HOSTS = http://<ES 宿主机 IP>:<ES 端口(默认:9200)> SERVER_NAME = test.kibana 

环境变量,如图所示:

至此,Kibana 就安装并运行成功了,可以打开浏览器,访问:

http://<Kibana 宿主机 IP>:<端口(默认:5601)> 

【Logstash】

在 Docker 注册表中,下载 Logstash 7.14.2 镜像。

端口说明
5044:beats 的默认端口
9600:浏览器访问的端口

对 Logstash 做路径映射时,需要注意:configdatalogs 目录,在宿主目录上要添加写入权限,为了方便,都添加了 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 

下载 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://<ES 宿主机 IP>:<ES 端口(默认:9200)>"] 
# 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://<MySql IP>:<MySql 端口(默认:3306)>/<Schema名称>" jdbc_user => "<MySql 登录帐号>" jdbc_password => "<MySql 登录密码>" # 同步时间规则,遵循 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 => ["<ES 宿主机 IP>:<ES 端口(默认:9200)>"] # 自定义索引名称 index => "user" # 需要关联的数据库中有有一个 id 字段,对应类型中的 id document_id => "%{id}" document_type => "user" } stdout { # JSON 格式输出 codec => json_lines } } 

至此,Logstash 就安装并运行成功了,可以打开浏览器,访问:

http://<Logstash 宿主机 IP>:<端口(默认:9600)> 

全文结束

原文链接:https://www.jianshu.com/p/e5880b58bc23

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享