filebeat + kafka + ELK搭建

1. 项目流程

2. 压缩与解压 .tar.gz 格式的文件

1、压缩命令:

命令格式:

tar -zcvf 压缩文件名 .tar.gz 被压缩文件名

可先切换到当前目录下,压缩文件名和被压缩文件名都可加入路径。

2、解压缩命令:

命令格式:

tar -zxvf 压缩文件名.tar.gz

解压缩后的文件只能放在当前的目录。

3. centos7防火墙开关

查看防火墙状态

firewall-cmd --state

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service

3. zookeeper和kafka安装

  1. 下载zookeeper镜像:

docker pull wurstmeister/zookeeper

  1. 下载kafka镜像:

docker pull wurstmeister/kafka

  1. 在自己选的目录下创建一个docker-compose.yml文件:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "10.0.0.202"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      LANG: "en_US.UTF-8"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

4. 启动docker-compose

> docker-compose up -d

5. 启动多个kafka 节点,比如3个

> docker-compose scale kafka=3

**测试使用:**

1.通过指定容器名(假设容器名为 elk_kafka_1)进入一个Kafka容器:
docker exec -it elk_kafka_1 /bin/bash

2.创建一个topic(其中假设zookeeper容器名为 elk_zookeeper_1,topic名为testtopic),输入:
$KAFKA_HOME/bin/kafka-topics.sh --create --topic testtopic \
--zookeeper elk_zookeeper_1:2181 --replication-factor 1 \
--partitions 1

3.查看新创建的topic:
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper elk_zookeeper_1:2181 \
--describe --topic testtopic

4.发布消息: (输入若干条消息后 按^C 退出发布)
$KAFKA_HOME/bin/kafka-console-producer.sh --topic=testtopic \
--broker-list elk_kafka_1:9092

5.接收消息:
$KAFKA_HOME/bin/kafka-console-consumer.sh \
--bootstrap-server elk_kafka_1:9092 \
--from-beginning --topic testtopic

4. filebeat安装

拉取centos镜像
产生的log文件和filebeat运行在这个centos容器中
拉取镜像:

docker pull centos

完成之后可以使用docker images查看镜像情况

制作centos容器

docker run -itd --name centos --privileged=true centos /sbin/init

使用docker ps查看容器情况

进入centos容器:

docker exec -it --privileged=true centos /bin/bash

安装wget:

yum install wget -y

在[elastic官网](https://www.elastic.co/cn/downloads/beats/filebeat)找到下载地址

进入自己filebeat的目录,下载:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz

解压包:

tar -zxvf filebeat-7.1.1-linux-x86_64.tar.gz

配置filebeat.yml 注意hosts后是kafka端口,去docker ps查看一下

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/log/elk.log
output.kafka:
  hosts: ["10.0.0.202:49153","10.0.0.202:49154","10.0.0.202:49155"]
  topic: 'testtopic'

启动filebeat:

./filebeat -e -c filebeat.yml

然后另开窗口进入centos容器向日志文件里加东西试试,kafka这边的消费者终端能收到东西就说明filebeat到kafka这里是好了

echo "filebeat test 777哈哈 888777777 测试" >> /usr/log/elk.log

5. logstach安装

拉取logstash镜像 logstash的镜像没法直接pull logstash来拉取 我们在dockerhub中找到需要的版本,找到对应的dockerfile中的版本全名,如:docker.elastic.co/logstash/logstash:7.1.1

docker pull docker.elastic.co/logstash/logstash:7.1.1

完成之后可以使用docker images查看镜像情况

制作logstash容器

docker run -itd -p 5044:5044 -p 5045:5045 --name logstash -e ES_JAVA_OPTS="-Xms1G -Xmx1G" logstash:7.1.1

使用docker ps查看容器情况

进入logstash容器修改配置config(也可以通过映射文件,在外面直接修改然后再启动容器)

logstash.yml :

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://10.211.55.4:9200" ]

新建文件 elk.config :

input {
  stdin{}
  kafka {
    bootstrap_servers => ["10.0.0.202:49166,10.0.0.202:49167,10.0.0.202:49168"]
    consumer_threads => 1
    topics => ["testtopic"]
    auto_offset_reset => "earliest"
  }
}
output {
  stdout{}
  elasticsearch {
    hosts => "http://10.0.0.202:9200"
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

测试阶段可以在input里面加一个stdin{},可以通过控制台输入

启动logstash:

bin/logstash -f config/elk.config

可能会遇到这个报错,到data目录下删除.lock文件即可

Logstash could not be started because there is already another instance using the 
configured data directory.  If you wish to run multiple instances, you must change
 the "path.data" setting.

同步数据库到es三种方式

1. logstash-input-jdbc: ruby语言开发,不能同步删除记录,同步分表时麻烦,ES官方推荐
2. elasticsearch-jdbc: Java开发,只支持到ES2.3.4
3. go-mysql-elastic:go语言开发,可以同步全库增删改查,但社区维护少有bug,不建议上生产环境

logstash-input-jdbc插件安装

Logstash5.X开始,已经至少集成了logstash-input-jdbc插件。所以,你如果使用的是logstash5.X,可以不必再安装,可以直接跳过这一步。

  1. 如果没有安装 gem 的话 安装gem

sudo yum install gem
  1. 换源

gem sources -l
# 删除默认的源
gem sources --remove https://rubygems.org/
#添加新的源
gem sources -a https://gems.ruby-china.org/
gem sources -l
  1. 修改Gemfile的数据源地址。步骤:

whereis logstash  # 查看logstash安装的位置, 我的在 /opt/logstash/ 目录
sudo vi Gemfile  # 修改 source 的值 为: "https://gems.ruby-china.org/"
sudo vi Gemfile.lock  # 找到 remote 修改它的值为: https://gems.ruby-china.org/
  1. 安装logstash-input-jdbc

  • 方法一

cd bin/
logstash-plugin install logstash-input-jdbc
如果成功就成功了。
  • 方法二

进入源码地址的release页面logstash-input-jdbc选择对应的版本下载

关于插件版本的选择 参考这里:这是ruby Gemfile所有插件的官方地址,参考logstash-core ,如果你的logstash版本跟他对应上,那么这个插件的版本就是你要的版本

复制下载地址

sudo wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v1.0.0.zip
cd bin/
logstash-plugin install v1.0.0.zip
  • 方法三直接本地下载后上传,解压安装

实例:

  1. mysql数据库,es,和logstash已经安装启动

  2. 进入logstash,进入配置文件中新增两个文件(elk.conf上面有了,jdbc.sql)前缀名无所谓

  3. 一个 mysql 的java 驱动包 : mysql-connector-java-5.1.36-bin.jar,官网下载上传解压

    宿主机本地文件上传到docker容器里:docker cp 宿主机本地路径 容器ID:容器路径

elk.conf中input下配置:

input{
  jdbc {
      jdbc_connection_string => "jdbc:mysql://106.75.30.97:8005/el_pvmi"
      jdbc_user => "root"
      jdbc_password => "l4396"
      jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      codec => plain { charset => "UTF-8"}
      use_column_value => true
      tracking_column => id
      record_last_run => true
      last_run_metadata_path => "/usr/share/logstash/config/station_parameter.txt"
      jdbc_paging_enabled => true
      jdbc_page_size => 300
      clean_run => false
      statement_filepath => "/usr/share/logstash/config/jdbc.sql"
      schedule => "* * * * *"
    }  
}

jdbc.sql :后面一定跟上排序id asc,并开启分页,否则一直处理同一批数据,造成死循环,最好的方式是表中加一个update_time字段每次修改都自动更新时间,使用update_time就可以当数据库有修改时自动同步

select * from station where id > :sql_last_value order by id asc

6. es安装

index 名称必须小写,这个是 es 的规定

拉取镜像:

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.1

启动运行容器:

docker run --name es -p 9200:9200 -p 9300:9300 \ docker.elastic.co/elasticsearch/elasticsearch:7.1.1

浏览器访问:http://10.0.0.202:9200

7. kibana安装

  1. 拉镜像:

docker pull docker.elastic.co/kibana/kibana:7.1.1
  1. 建容器:

docker run -d --name kibana -p 5601:5601 docker.elastic.co/kibana/kibana:7.1.1

浏览器访问:http://10.0.0.202:5601

 

posted @ 2021-05-10 16:51  Mr沈  阅读(362)  评论(0编辑  收藏  举报