docker搭建ELK之二(logstash)
一、docker 安装logstash,导入mysql数据到ES里
- 拉取镜像
docker pull logstash:7.10.1
- 创建并启动容器
docker run -d -p 5044:5044 --name logstash logstash:7.10.1
- 获取配置文件
mkdir -p ~/elk/logstash/ && chmod 777 ~/elk/logstash/
docker cp logstash:/usr/share/logstash/config ~/elk/logstash/
docker cp logstash:/usr/share/logstash/pipeline ~/elk/logstash/
- 删除容器
docker rm -f logstash
- 修改配置文件
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://localhost:9200" ]
- pipeline.id: mail
path.config: "/usr/share/logstash/pipeline/jdbc.conf"
- 增加jdbc.conf
input {
jdbc {
jdbc_connection_string =>"jdbc:mysql://172.27.12.66:3306/db"
jdbc_user => "root"
jdbc_password => "123456"
jdbc_driver_library => "/usr/share/logstash/pipeline/mysql-connector-java-8.0.13.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
record_last_run => true
last_run_metadata_path => "/usr/share/logstash/pipeline/lastvalue.txt"
use_column_value => true
tracking_column => "id"
tracking_column_type => "numeric"
clean_run => false
statement => "select `id`,`title`,`content`,`author`,`created_at`,`created_by` FROM db.article"
schedule => "* * * * *"
type => "jdbc"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => ["172.27.12.66:9200"]
index => "db"
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
- 增加驱动库
百度网盘链接/提取码81t5
- 以文件挂载方式启动docker容器logstash
docker run -d -p 5044:5044 \
-v ~/elk/logstash/config:/usr/share/logstash/config \
-v ~/elk/logstash/pipeline:/usr/share/logstash/pipeline \
--name logstash \
logstash:7.10.1
docker inspect logstash | grep Mounts -A 30
docker logs -f -t --tail 20 logstash(容器名)
二、docker安装mysql容器
- 创建并启动容器(本地不存在该镜像的话会在docker.hub中获取)
cd ~/elk/
docker run -d --name mysql8 -p 3306:3306 --net mynet \
-e MYSQL_ROOT_PASSWORD=123456 \
-v "$PWD/mysql/data":/var/lib/mysql \
-v "$PWD/mysql/conf":/etc/mysql/conf.d \
mysql:8
- 以交互的方式进入容器
docker exec -it mysql8 /bin/bash
- 连接数据库
cd /var/lib/mysql/
mysql -u root -p 123456
- 创建数据库
mysql> create database db;
Query OK, 1 row affected (0.06 sec)
- 创建数据表
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article`(
id BIGINT NOT NULL PRIMARY KEY auto_increment COMMENT '文章ID',
title VARCHAR(16) NOT NULL COMMENT '标题',
content text NOT NULL COMMENT '内容',
author VARCHAR(16) COMMENT '作者',
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
created_by VARCHAR(16) NOT NULL COMMENT '创建人',
updated_by VARCHAR(16) NOT NULL COMMENT '更新人',
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
INSERT INTO `article`(`title`,`content`,`author`,`created_by`,`updated_by`) VALUES ('Go编程学习','第一章节:Go历史;第二章节:Hello Go!','daigd','sys','sys');
- 有时会因为内存不足导致运行mysql时,es容器被关闭
docker exec -it mysql8 bash
apt-get update
apt-get install vim
vim /etc/mysql/conf.d/docker.cnf
[mysqld]
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
performance_schema = off
skip-host-cache
skip-name-resolve
docker restart mysql8