安装elasticsearch
1.拉取elastic search镜像
docker pull elasticsearch:7.3.0
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/elasticsearch latest 5acf0e8da90b 18 months ago 486 MB
2.启动elasticsearch
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch
这里的-p 5601:5601 是kibana的端口地址 (我这里kibana的container共用elasticsearch的网络,所以这样设置)
3.查看容器启动状况
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 672a615ca57b elasticsearch "/docker-entrypoin..." 40 minutes ago Up 40 minutes 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch |
[root@localhost ~]# docker inspect 672a615ca57b
4.访问elastic search
打开浏览器访问http://192.168.1.100:9200,如果看到如下页面,说明elasticsearch安装成功
安装kibana
[root@localhost ~]# docker pull kibana
[root@localhost ~]# docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana
打开浏览器查看http://192.168.1.100:5601/app/kibana
这里我们做一些测试
#1.创建索引
put /mayikt
#2.创建document,插入数据
put /mayikt/user/1
{
"name":"fj",
"sex":"1",
"age":"22"
}
#3.查看数据
GET /mayikt/user/1
#4.查看document中所有数据
GET /mayikt/user/_search
{
"query":{
"match_all":{}
}
}
安装logstash
1.下载logstash,这里我选择的是6.4.3版本
官网地址为:http://www.elastic.co/cn/products/logstash
2.安装logstash
[root@localhost local]# tar -zxf logstash-6.4.3.tar.gz
[root@localhost local]# mv logstash-6.4.3 logstash
#安装logstash的jdbc插件和es插件
[root@localhost logstash]# bin/logstash-plugin install logstash-input-jdbc
[root@localhost logstash]# bin/logstash-plugin install logstash-output-elasticsearch
3.创建配置文件mysql.conf
#从mysql数据库中提取数据,每一分钟扫描一次,根据update_time是否更新判断数据是否改变 input { jdbc { jdbc_driver_library => "/usr/local/mysql/mysql-connector-java-5.1.46.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://192.168.1.104:3306/test" jdbc_user => "root" jdbc_password => "root" schedule => "* * * * *" statement => "SELECT * FROM user WHERE update_time >= :sql_last_value" use_column_value => true tracking_column_type => "timestamp" tracking_column => "update_time" last_run_metadata_path => "syncpoint_table" } }
#输出到elastic search output { elasticsearch { # ES的IP地址及端口 hosts => ["192.168.1.100:9200"] # 索引名称 可自定义 index => "user" # 需要关联的数据库中有有一个id字段,对应类型中的id document_id => "%{id}" document_type => "user" } stdout { # JSON格式输出 codec => json_lines } } |
相关配置说明:
jdbc_driver_library: jdbc mysql 驱动的路径,在上一步中已经下载 jdbc_driver_class: 驱动类的名字,mysql 填 com.mysql.jdbc.Driver 就好了 jdbc_connection_string: mysql 地址 jdbc_user: mysql 用户 jdbc_password: mysql 密码 schedule: 执行 sql 时机,类似 crontab 的调度 statement: 要执行的 sql,以 “:” 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量 use_column_value: 使用递增列的值 tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型 tracking_column: 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp last_run_metadata_path: 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改 |
4.启动logstash
[root@localhost logstash]# ./bin/logstash -f mysql.conf
也可以后台运行:nohup ./bin/logstash -f mysql.conf &
这时我们登录kibana可以看到数据已经存储到es里面了