docker搭建ELK

docker搭建ELK之二(logstash)

一、docker 安装logstash,导入mysql数据到ES里

  1. 拉取镜像
# 拉取镜像
docker pull logstash:7.10.1
  1. 创建并启动容器
# 创建并运行容器
docker run -d -p 5044:5044 --name logstash  logstash:7.10.1
  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/
  1. 删除容器
# 删除容器
docker rm -f logstash
  1. 修改配置文件
# 修改 ~/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"
  1. 增加jdbc.conf

docker搭建ELK_第1张图片

#详细插件信息查看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
    }
}
  1. 增加驱动库

百度网盘链接/提取码81t5

  1. 以文件挂载方式启动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容器

  1. 创建并启动容器(本地不存在该镜像的话会在docker.hub中获取)
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
  1. 以交互的方式进入容器
# 以交互模式进入容器
docker exec -it mysql8 /bin/bash
  1. 连接数据库
# 连接数据库
cd /var/lib/mysql/
mysql -u root -p 123456

docker搭建ELK_第2张图片

  1. 创建数据库
# 创建database
mysql> create database db;
Query OK, 1 row affected (0.06 sec)
  1. 创建数据表
# 创建一个表
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');
  1. 有时会因为内存不足导致运行mysql时,es容器被关闭
# 修改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

你可能感兴趣的