准备工作
下载Elasticsearch 镜像,启动容器
-
docker pull elasticsearch:7.8.1
该镜像暂不支持默认不写版本号的latest版本下载方式,所以需要根据Elasticsearch的dockerhub官方页面去下载指定版本的镜像 -
下载镜像后,可以使用简单的命令先创建一个容器来测试一下是否好用,然后再启动这个镜像
docker network create ESnet docker run -d --name elasticsearch --net ESnet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.1
-
启动之后如果日志没有报错,可以通过访问IP:9200查看是否能够打开一个Elasticsearch的信息页面,能看到就说明已经成功启动了
-
ES比较吃内存,如果是2G内存的服务器可能无法同时启动ES和Kibana。
-
elasticsearch-head 一个小工具,可以使用浏览器图形化管理Elasticsearch,chrome上有插件可以操作
下载Kibana镜像,启动容器
-
docker pull kibana:7.8.1
该镜像不支持默认不写版本号的latest版本下载方式,也需要去官网页面找到指定版本号进行下载 官方dockerhub页面 -
docker run -p 5601:5601 --name kibana --net ESnet -e "elasticsearch.hosts=http://localhost:9200" -d kibana:7.8.1
启动Kibana,其中的net网络使用之前Elasticsearch创建的网络即可 - 启动后可以访问IP:5601查看Kibana的主页面,注意Kibana启动较慢,可以耐心等待一会
下载logstash镜像,启动容器
-
docker pull logstash:7.8.1
该镜像不支持默认不写版本号的latest版本下载方式,也需要去官网页面找到指定版本号进行下载logstash的dockerhub官方页面 - 可以启动一个简单的容器测试一下
docker run -it --rm logstash:7.8.1 -e 'input { stdin { } } output { stdout {} }'
启动之后logstash可以将当前屏幕的输入转换为logstash标准输出打印在屏幕上
启动容器
docker compose
-
通过一个docker-compose文件,统一管理三个容器
version: '2' services: elasticsearch: image: elasticsearch:7.8.1 container_name: elasticsearch environment: - "discovery.type=single-node" network_mode: "host" kibana: image: kibana:7.8.1 container_name: kibana volumes: - ./kibana.yml:/usr/share/kibana/config/kibana.yml:ro network_mode: "host" logstash: image: logstash:7.8.1 container_name: logstash volumes: - ./logstash.yml:/usr/share/logstash/config/logstash.yml:ro - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro - ~/WorkSpace/ceshiren_topic/:/data/ network_mode: "host" command: bash -c "logstash --config.reload.automatic"
-
设置kibana和logstash的配置文件:(其中10.1.1.100是本机IP地址)
-
kibana.yml
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://10.1.1.100:9200" ] monitoring.ui.container.elasticsearch.enabled: true i18n.locale: "zh-CN"
-
i18n.locale: "zh-CN"
可以配置界面为中文
-
-
logstash.yml
http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://10.1.1.100:9200" ]
-
logstash.conf 官方示例:https://www.elastic.co/guide/en/logstash/current/config-examples.html
input { file { path => "/data/*.json" start_position=>"beginning" } } filter { json { source => "message" } date { match => ["create_time","yyyy-MM-dd HH:mm:ss"] } } output { elasticsearch { hosts => ["http://10.1.1.100"] document_id => "topic_%{topic_id}" } stdout{} }
- logstash是通过各种plugins去实现对数据的操作功能
- input部分是对源数据的操作,input中的file表明从文件中读取数据,path是读取数据的路径和文件名,支持使用通配符批量读取文件,start_position表示从文件起始位置读取,这样在logstash启动时,会将目录中的旧数据读取一遍,而不是只读取每个文件在启动后新增的内容。
- 官方Input plugins介绍
- filter是匹配规则,可以指定数据的格式,这样logstash会根据给出的格式去匹配。
- 官方Filter plugins介绍
- output是对输出数据的操作,可以指定输出的目的地,以及对输出数据的操作,stdout是标准输出,会打印在控制台中,能够在日志看到,初期调试的时候可以加上这个,方便对数据结果直观展示,进行调试。
- 官方Output plugins介绍
-
准备数据
数据抓取、格式处理
- 使用python循环抓取https://ceshiren.com/latest.json页面数据,根据需要获取具体的数据后,将数据拼接成符合要求的json格式字符串,写入预置的json文件中等待logstash去读取。
- 注意,logstash对json数据的格式有要求,字段需要用双引号包裹而不是单引号,而且文件中一条json数据保存为一行比较好,不然的话logstash会将每行解析为单独的数据,导致数据结构不完整不能被认为是json格式。(可以使用jq的-c参数,将json格式压缩为每行一条数据)
- 推荐一个工具elasticsearch head ,chrome上有插件,可以直接连接ES数据库,查看和操作数据,不过要注意,工具可以直接删除数据,这个操作要谨慎使用,如果删除了kibana的基础数据,会导致kibana无法启动。
- 在logstash.conf文件中的输出部分配置了stdout,所以logstash抓取之后会同时打印一份数据到日志中,可以根据这个查看插入数据库的数据格式和情况,判断数据是否有问题
查看数据,制作图表
确认数据正确
- 使用elasticsearch head查看ES里的数据,格式内容等信息是否符合预期,确认数据格式,数据数量的正确性
在kibana中加载数据,制作图表
创建一个按天统计全论坛发帖量的折线图
-
创建折线图
-
选中自己的数据源,进入图表编辑页面
-
给Y轴设定一个别名,方便查看数据。按照图表要求,需要在X轴对时间做聚合,所以横轴选择Date Histogram,间隔时间根据需要选择为按天,设置完毕需要点击更新按钮才能看到设置后的结果。全部设置成功后需要保存,就可以将其添加到自己的Dashboard中进行使用了
创建一个按用户统计总发帖量的柱状图
-
创建柱状图
-
选中自己的数据源,进入图表编辑页面
-
根据图标要求,Y轴依旧是统计总和,X轴因为这次是按照数据中的字段进行聚合,所以在聚合中选择Terms选项,然后在字段中选择对应的字段,排序和展示的数据量根据需要可以自行调整,展示后发现文字是纵向排列非常不方便阅读,可以将其调整为水平展示。
-
注意!每次编辑完Dashboard之后,不只是每个图表要进行保存,整个Dashboard也要进行保存!
创建一个搜索结果信息展示列表
-
首先在左侧菜单中切换到Discover页面
-
在选择正确的索引之后,根据需要选择展示需要的字段,这样右侧的列表中就会根据需要展示响应的字段(因为按照时间戳排序,所以时间字段无法隐藏)
-
设置完毕后点击页面上方的保存,将其保存为一个可视化组件,这样就可以将它添加到Dashboard中进行展示了