# 拉取镜像
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
# 修改 ~/elk/logstash/config/logstash.yml
# 此处的hosts为本地es的运行环境 但并不是localhost:9200
# 因为docker容器会以为这是docker中的本机IP
# 而要使用ifconfig命令去查找 本机映射在docker中的局域网IP
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://localhost:9200" ]
# 修改管道文件配置 ~/elk/logstash/config/pipelines.yml
- pipeline.id: mail
path.config: "/usr/share/logstash/pipeline/jdbc.conf"
#详细插件信息查看elastic官网input-plugins\filter-plugins\output-plugins
#input 插件指定数据的输入源,一个pipeline可以有多个input插件
# 当前文件的所有172.27.12.66都应该替换为ES或mysql所在的IP
input {
jdbc {
#使用用户root连接到Telegram数据库
jdbc_connection_string =>"jdbc:mysql://172.27.12.66:3306/db"
#数据库用户名
jdbc_user => "root"
#数据库密码
jdbc_password => "123456"
#在当前路径中放置适当的JDBC驱动程序库
jdbc_driver_library => "/usr/share/logstash/pipeline/mysql-connector-java-8.0.13.jar"
# mysql的驱动类的名称
jdbc_driver_class => "com.mysql.jdbc.Driver"
#启用分页,默认false
jdbc_paging_enabled => "true"
#页面大小,默认100000
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"
#numeric或者timestamp
tracking_column_type => "numeric"
#如果为true则会清除last_run_metadata_path记录,即重新开始同步数据
clean_run => false
# sql语句文件,对于复杂的查询,可以放在文件中,如:
# statement_filepath => "jdbc.sql"这个文件路径要跟jdbc.sql对应上
statement => "select `id`,`title`,`content`,`author`,`created_at`,`created_by` FROM db.article"
#设置监听间隔。可以设置每隔多久监听一次什么的。
#官方举例:
#* 5 * 1-3 * 一月到三月的每天凌晨5点每分钟执行一次。
#0 * * * * 将在每天每小时的第0分钟执行。
#0 6 * * * America/Chicago每天早上6:00(UTC / GMT -5)执行。
#* * * * * 分、时、天、月、年,全部为*默认含义为每分钟查询一次
schedule => "* * * * *"
#索引类型
type => "jdbc"
}
}
#filter插件是logstash的主要功能之一,可以对logstash event进行丰富的处理。如类型转换、删除字段等。
filter {
#json 按照json解析字段内容到指定字段中
json {
#source 要解析的字段名
source => "message"
#解析后的存储字段
remove_field => ["message"]
}
}
#output负责将数据输出到指定的位置
output {
#输出到ES中,基于HTTP实现
elasticsearch {
#用户节点地址,这里对应我们的ES的IP地址和端口
hosts => ["172.27.12.66:9200"]
#索引名称
index => "db"
#自增ID 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
#stdout输出到标准输出,一般用于调试
stdout {
codec => json_lines
}
}
百度网盘链接/提取码81t5
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(容器名)
cd ~/elk/
# --name 指定容器名
# --p 暴露端口
# --net 指定自定义网络
# -e MYSQL_ROOT_PASSWORD=123456 指定数据库密码
# -v "$PWD/mysql/data":/var/lib/mysql 将mysql的/var/lib/myql 目录挂载到当前路径下的/mysql/data目录
# -v "$PWD/mysql/conf":/etc/mysql/conf.d 将mysql的配置挂载到当前路径下的/mysql/conf目录
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
# 创建database
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运行内存
# 进入容器
docker exec -it mysql8 bash
# 下载vim
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
#用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源东西
performance_schema = off
skip-host-cache
skip-name-resolve
# 重启容器
docker restart mysql8