使用docker安装部署ELK,完成mysql同步数据es(详细步骤)
第一次安装使用elk,做个记录,本地windows版部署使用已跑通,现在就试了下linux的,选用docker进行部署,主要原因是使用安装包部署过于麻烦,docker部署简洁,用的版本是6.8.1。
windows版elasticsearch+logstash参考:
https://blog.csdn.net/qq_15199097/article/details/91819540
https://blog.csdn.net/wzn1054162229/article/details/101480921
https://blog.csdn.net/fjyab/article/details/81101284
注:上方博客可能配置方式不同,请自行参照。其中配置logstash将数据库数据导入到Elasticsearch中时,如果运行不能连接,那么数据库连接JAR包请放到下方路径下:
pull下来的镜像,我都做了重命名(pull下来的镜像名字太长,以下不重复此步骤):
docker tag docker.elastic.co/elasticsearch/elasticsearch:6.8.1 elasticsearch:latest
一、安装ElasticSearch
1、准备Elasticsearch配置文件
创建目录elk,在目录中创建elasticsearch文件夹。
在elasticsearch/config文件夹,存放配置文件elasticsearch.yml,文件的内容如下:
network.host: 0.0.0.0
xpack:
ml.enabled: false
monitoring.enabled: false
security.enabled: false
watcher.enabled: false
2、准备镜像
6.0之后官方开始自己维护镜像版本:https://www.docker.elastic.co/。找到需要的ELK镜像地址,pull下来就好了。pull命令:
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.1
使用docker images指令
查看镜像:
3、修改vm.max_map_count
在elasticsearch的docker版本文档中,官方提到了vm.max_map_count
的值在生产环境最少要设置成262144。设置的方式有两种:
1)在生产模式下配置vm.max_map_count参数(永久生效):
vi /etc/sysctl.conf #修改或新增 vm.max_map_count = 262144 #立即生效 sysctl -p
2)正在运行的机器:(一次生效)
sysctl -w vm.max_map_count=262144
4、运行容器
之后我们执行命令,暴露容器的9200,9300端口,方便我们在其它集器上可以通过类似head插件去做es索引的操作等,挂载出目录,读取宿主机上的配置文件。执行命令为:
docker run -it -d -p 9200:9200 -p 9300:9300 -v "$PWD"/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name elasticsearch -e "discovery.type=single-node" elasticsearch:6.8.1
如果你还需要存储历史数据,那么就需要将data目录保存到本地,使用-v,或者mount参数挂载本地一个目录。
运行时如果报错内存不足,请参考:Docker 启动elasticsearch报内存不足解决
二、安装Logstash
1、准备配置文件
新建logstash文件夹,并在其下新建config、pipeline、jars、pipeLine、sql四个文件夹。
其中 其中config文件夹下有文件logstash.yml、pipelines.yml;
pipeline文件夹下放置文件logstash-mysql.conf;
jars文件夹下放置mysql驱动包,此处选用mysql-connector-java-5.1.7-bin.jar;
sql文件夹下放置mysql.sql文件
内容分别为:
logstash.yml:
config:
reload:
automatic: true
interval: 3s
xpack:
management.enabled: false
monitoring.enabled: false
pipelines.yml:
- pipeline.id: mysql
path.config: "/usr/share/logstash/pipeline/logstash-mysql.conf"
注:此处配置的是logstash读取的config文件
logstash-mysql.conf:
input {
jdbc {
# mysql 数据库链接,test为数据库名
jdbc_connection_string => "jdbc:mysql://192.168.100.105:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"
jdbc_user => "root"
jdbc_password => "root"# 驱动路径
jdbc_driver_library => "/usr/share/logstash/jars/mysql-connector-java-5.1.30-bin.jar"# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"#是否分页
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
record_last_run => true
use_column_value => true
tracking_column => "id"
last_run_metadata_path => "/usr/local/src/logstash/last_run_record"
#直接执行sql语句
#statement =>"statement =>"select * from test where id >:sql_last_value""
# 执行的sql 文件路径+名称
statement_filepath => "/usr/share/logstash/sql/mysql.sql"#设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"# 索引类型
#type => "jdbc"
}}
output {
elasticsearch {
#es的ip和端口
hosts => ["192.168.100.105:9200"]
#ES索引名称(自己定义的)
index => "goodscat"
#文档类型(自己定义的)
document_type => "docs"
#设置es中数据的id为数据库中的字段(一般设置为mysql中主键字段)
document_id => "%{cid}"
}
stdout {
codec => json_lines
}}
多表同步logstash.config配置参考:Logstash多表同步MySQL数据到ES
mysql.sql:(要同步到es的sql)
SELECT * FROM wp_ex_source_goods_tb_cat_copy
2、准备镜像
注:logstash需要跟es版本一致
docker pull docker.elastic.co/logstash/logstash:6.8.1
3、运行
docker run -it --name logstash --link elasticsearch -d -v "$PWD"/config:/usr/share/logstash/config/ -v "$PWD"/jars/:/usr/share/logstash/jars/ -v "$PWD"/pipeline/:/usr/share/logstash/pipeline/ -v "$PWD"/sql/:/usr/share/logstash/sql/ logstash
"$PWD" 为当前目录,此处为: /home/elk/logstash 目录中
在输入中:输入的日志文件使用/usr/share/logstash/pipeline/logs/test.log,只需将日志文件放入pipeline/logs/下,或者手动映射进容器即可。
到此,即可将mysql同步数据到es中
三、安装kibana
1、准备配置文件
新建kibana文件夹,并在其下新建config/kibana.yml文件,内容如下:
server.host: "0.0.0.0"
elasticsearch.url: http://192.168.100.105:9200
xpack:
apm.ui.enabled: false
graph.enabled: false
ml.enabled: false
monitoring.enabled: false
reporting.enabled: false
security.enabled: false
grokdebugger.enabled: false
searchprofiler.enabled: false
2、准备kibana镜像
docker pull docker.elastic.co/kibana/kibana:6.8.1
3、运行
映射出端口5601,挂载出kibana配置文件,执行命令为:
docker run -it -d -p 5601:5601 -v "$PWD"/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana
kibana的作用主要是帮助我们将日志文件可视化。便于我们操作,统计等。它需要ES服务,所以我们将部署好的es和kibana关联起来,主要用到的参数是--link,
使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址
,这样我们就直接通过定义的name来访问es服务了。