群晖 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

路径映射,如图所示:


ElasticSearch 路径映射

设置环境变量(全部参数配置),简单配置,如下所示:

node.name = test-es
discovery.type = single-node
ES_JAVA_OPTS = -Xms512m -Xmx512m

环境变量,如图所示:


ElasticSearch 环境变量

上述内容都设置好后,就可以直接创建并运行容器了。
接下来,安装 中文分词拼音 插件。
打开上面的插件链接,直接下载相应版本的 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 分词结果如下图:

ik 分词测试结果

拼音测试,参考 Github

【Kibana】

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

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

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

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

路径映射,如图所示:


Kibana 路径映射

设置环境变量(全部参数配置),如下所示:

ELASTICSEARCH_HOSTS = http://:
SERVER_NAME = test.kibana

环境变量,如图所示:


Kibana 环境变量

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

http://:<端口(默认: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

MySql 的驱动库,可以到 官网下载,如图所示:

MySql 访问驱动库(JDBC)

下载 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)>

全文结束

你可能感兴趣的:(群晖 NAS 的 Docker 组件上安装 ELK(单节点))