• 搭建ELK+Filebead+zookeeper+kafka实验(详细版)


    一、ELK+Filebead+zookeeper+kafka架构

    第一层:数据采集层(Filebeat)

    • 数据采集层位于最左边的业务服务集群上,在每个业务服务器上面安装了filebead做日志收集,然后把采集到的原始日志发送到kafka+zookeeper集群上。

    第二层:消息队列层(kafka+zookeeper集群)

    • 原始日志发送到kafka+zookeeper集群上后,会进行集中存储,此时filebead是消息的生产者,存储的消息可以随时被消费。

    第三层:数据分析层(Logstash)

    • logstash作为消费者,回去kafka+zookeeper集群节点时实拉去原始日志,然后将获取到的原始日志根据规则进行分析、格式化处理,最后将格式化的日志转发至Elasticsearch集群中。

    第四层:数据持久化存储(Elasticsearch集群

    • Elasticsearch集群接收到logstash发送过来的数据后,执行写入磁盘,建立索引等操作,最后将结构化数据存储到Elasticsearch集群上。

    第五层:数据查询,展示层(kibana)

    • kibana是一个可视化的数据展示平台,当有数据检索请求时,它从Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析.

    二、部署实验

    主机名ip地址所属集群安装软件包
    filebead192.168.247.20数据采集级层filebead+apache
    kafka1192.168.247.21kafka+zookeeper集群kafka+zookeeper
    kafka2192.168.247.22kafka+zookeeper集群kafka+zookeeper
    kafka3192.168.247.23kafka+zookeeper集群kafka+zookeeper
    logstash192.168.247.60数据处理层logstash
    node1192.168.247.70ES集群Eslasticsearch+node+phantomis+head
    node2192.168.247.80ES集群+kibana展示Elasticsearch+node+phantomis+head+kibana

    1、安装kafaka+zookeeper集群(192.168.247.21、192.168.247.22、192.168.247.23)

    1.1 安装zookeeper集群

    1. 关闭防火墙和安全机制
    2. 下载安装依赖环境
    1. //关闭防火墙
    2. systemctl stop firewalld
    3. systemctl disable firewalld
    4. setenforce 0
    5. //安装 JDK
    6. yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
    7. java -version
    1. 安装软件
    2. 修改配置文件
    1. 方法一:下载安装包
    2. 官方下载地址:https://archive.apache.org/dist/zookeeper/
    3. cd /opt
    4. wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
    5. 方法二:或者直接将软件包上传到/opt目录下。
    6. tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
    7. mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7
    8. 修改配置文件
    9. cd /usr/local/zookeeper-3.5.7/conf
    10. cp zoo_sample.cfg zoo.cfg
    11. vim zoo.cfg
    12. tickTime=2000
    13. #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
    14. initLimit=10
    15. #Leader和Follower初始连接时能容忍的最多心跳数( tickTime的数量),这里表示为10*2s
    16. syncLimit=5
    17. #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
    18. dataDir=/usr/local/zookeeper-3.5.7/data
    19. #●修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
    20. dataLogDir=/usr/local/zookeeper-3.5.7/1ogs
    21. #●添加,指定存放日志的目录,目录需要单独创建
    22. clientPort=2181 #客户端连接端口
    23. #添加集群信息
    24. server.1=192.168.247.21:3188:3288
    25. server.2=192.168.247.22:3188:3288
    26. server.3=192.168.247.23:3188:3288
    1. 拷贝配置好的 Zookeeper 配置文件到其他机器上
    2. 在每个节点上创建数据目录和日志目录
    3. 设置三台机器的myid
    1. //拷贝配置好的 Zookeeper 配置文件到其他机器上
    2. scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.247.22:/usr/local/zookeeper-3.5.7/conf/
    3. scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.247.23:/usr/local/zookeeper-3.5.7/conf/
    4. //在每个节点上创建数据目录和日志目录
    5. mkdir /usr/local/zookeeper-3.5.7/data
    6. mkdir /usr/local/zookeeper-3.5.7/logs
    7. //在每个节点的dataDir指定的目录下创建一个 myid 的文件
    8. echo 1 > /usr/local/zookeeper-3.5.7/data/myid
    9. echo 2 > /usr/local/zookeeper-3.5.7/data/myid
    10. echo 3 > /usr/local/zookeeper-3.5.7/data/myid
    1. 配置 Zookeeper 启动脚本
    2. 设置开机自启
    3. 分别启动 Zookeeper
    1. vim /etc/init.d/zookeeper
    2. #!/bin/bash
    3. #chkconfig:2345 20 90
    4. #description:Zookeeper Service Control Script
    5. ZK_HOME='/usr/local/zookeeper-3.5.7'
    6. case $1 in
    7. start)
    8. echo "---------- zookeeper 启动 ------------"
    9. $ZK_HOME/bin/zkServer.sh start
    10. ;;
    11. stop)
    12. echo "---------- zookeeper 停止 ------------"
    13. $ZK_HOME/bin/zkServer.sh stop
    14. ;;
    15. restart)
    16. echo "---------- zookeeper 重启 ------------"
    17. $ZK_HOME/bin/zkServer.sh restart
    18. ;;
    19. status)
    20. echo "---------- zookeeper 状态 ------------"
    21. $ZK_HOME/bin/zkServer.sh status
    22. ;;
    23. *)
    24. echo "Usage: $0 {start|stop|restart|status}"
    25. esac
    26. // 设置开机自启
    27. chmod +x /etc/init.d/zookeeper
    28. chkconfig --add zookeeper
    29. //分别启动 Zookeeper
    30. service zookeeper start
    31. //查看当前状态
    32. service zookeeper status

    1.2 部署 kafka 集群

    1. 安装软件
    2. 修改配置文件
    1. 方法一:下载安装包
    2. 官方下载地址:http://kafka.apache.org/downloads.html
    3. cd /opt
    4. wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz
    5. 方法二:或者直接将软件包上传到/opt目录下。
    6. cd /opt/
    7. tar zxvf kafka_2.13-2.7.1.tgz
    8. mv kafka_2.13-2.7.1 /usr/local/kafka
    • kafka1配置文件修改
    1. //修改配置文件
    2. cd /usr/local/kafka/config/
    3. cp server.properties{,.bak}
    4. vim server.properties
    5. broker.id=021行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置
    6. listeners=PLAINTEXT://192.168.247.21:909231行,指定监听本机的IP和端口
    7. log.dirs=/usr/local/kafka/logs #60行,kafka运行日志存放的路径,也是数据存放的路径
    8. zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181123行,配置连接Zookeeper集群地址
    • kafka2配置文件修改
    1. //修改配置文件
    2. cd /usr/local/kafka/config/
    3. cp server.properties{,.bak}
    4. vim server.properties
    5. broker.id=121行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置
    6. listeners=PLAINTEXT://192.168.247.22:9092 ●31行,指定监听本机的IP和端口
    7. log.dirs=/usr/local/kafka/logs #60行,kafka运行日志存放的路径,也是数据存放的路径
    8. zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181123行,配置连接Zookeeper集群地址
    • kafka3配置文件修改
    1. //修改配置文件
    2. cd /usr/local/kafka/config/
    3. cp server.properties{,.bak}
    4. vim server.properties
    5. broker.id=221行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置
    6. listeners=PLAINTEXT://192.168.247.23:9092 ●31行,指定监听本机的IP和端口
    7. log.dirs=/usr/local/kafka/logs #60行,kafka运行日志存放的路径,也是数据存放的路径
    8. zookeeper.connect=192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181123行,配置连接Zookeeper集群地址
    1. 修改环境变量
    2. 配置 Zookeeper 启动脚本
    3. 设置开机自启,分别启动 Kafka
    1. //修改环境变量
    2. vim /etc/profile
    3. export KAFKA_HOME=/usr/local/kafka
    4. export PATH=$PATH:$KAFKA_HOME/bin
    5. source /etc/profile
    6. //配置 Zookeeper 启动脚本
    7. vim /etc/init.d/kafka
    8. #!/bin/bash
    9. #chkconfig:2345 22 88
    10. #description:Kafka Service Control Script
    11. KAFKA_HOME='/usr/local/kafka'
    12. case $1 in
    13. start)
    14. echo "---------- Kafka 启动 ------------"
    15. ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
    16. ;;
    17. stop)
    18. echo "---------- Kafka 停止 ------------"
    19. ${KAFKA_HOME}/bin/kafka-server-stop.sh
    20. ;;
    21. restart)
    22. $0 stop
    23. $0 start
    24. ;;
    25. status)
    26. echo "---------- Kafka 状态 ------------"
    27. count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
    28. if [ "$count" -eq 0 ];then
    29. echo "kafka is not running"
    30. else
    31. echo "kafka is running"
    32. fi
    33. ;;
    34. *)
    35. echo "Usage: $0 {start|stop|restart|status}"
    36. esac
    37. //设置开机自启
    38. chmod +x /etc/init.d/kafka
    39. chkconfig --add kafka
    40. //分别启动 Kafka
    41. service kafka start
    42. //查看端口
    43. netstat -antp |grep 9092
    1.2.1 Kafka 命令行操作

    创建topic

    1. kafka-topics.sh --create --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --replication-factor 2 --partitions 3 --topic test
    2. #--zookeeper:定义zookeeper集群服务器地址,如果有多个ip以逗号分隔。
    3. #--replication-factor:定义分区副本,1代表但副本,建议为2
    4. #--partitions: 定义分区数
    5. #--topic :定义topic名称

    查看当前服务器中的所有topic

    kafka-topics.sh --list --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181

    查看某个 topic 的详情

    kafka-topics.sh --describe --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181

    发布消息

    kafka-console-producer.sh --broker-list 192.168.247.21:9092,192.168.247.22:9092,192.168.247.23:9092  --topic test
    

    消费消息

    1. kafka-console-consumer.sh --bootstrap-server 192.168.247.21:9092,192.168.247.22:9092,192.168.247.23:9092 --topic test --from-beginning
    2. #--from-beginning:会把主题中以往所有的数据都读取出来

    修改分区数

    kafka-topics.sh --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --alter --topic test --partitions 6
    

    删除 topic

    kafka-topics.sh --delete --zookeeper 192.168.247.21:2181,192.168.247.22:2181,192.168.247.23:2181 --topic test
    

    2、部署Filebead(192.168.247.20)

    1. 关闭防火墙
    2. 安装httpd服务,并启动
    1. systemctl stop firewalld.service
    2. setenforce 0
    3. //安装httpd服务
    4. yum -y install httpd
    5. systemctl start httpd.service
    1.  安装 Filebeat
    2. 设置 filebeat 的主配置文件
    1. 安装 Filebeat
    2. #上传软件包 filebeat-6.6.0-linux-x86_64.tar.gz 到/opt目录
    3. tar zxvf filebeat-6.6.0-linux-x86_64.tar.gz
    4. mv filebeat-6.6.0-linux-x86_64/ /usr/local/filebeat
    5. 2.设置 filebeat 的主配置文件
    6. cd /usr/local/filebeat
    7. vim filebeat.yml

    1. 启动服务
    ./filebeat -e -c filebeat.yml

    3、部署ES服务(192.168.247.70  192.168.247.80)

    3.1 安装JDK

    1. java -version #如果没有安装,yum -y install java
    2. openjdk version "1.8.0_131"
    3. OpenJDK Runtime Environment (build 1.8.0_131-b12)
    4. OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

    3.2 安装ES服务

    配置本地解析,上传安装包安装并启动

    1. 配置本地解析
    2. echo "192.168.247.70 node1" >> /etc/hosts
    3. echo "192.168.247.80 node2" >> /etc/hosts
    4. #上传elasticsearch-5.5.0.rpm到/opt目录下
    5. cd /opt
    6. rpm -ivh elasticsearch-5.5.0.rpm
    7. #加载系统服务
    8. systemctl daemon-reload
    9. systemctl enable elasticsearch.service

    修改配置文件

    1. #修改elasticsearch主配置文件
    2. cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
    3. vim /etc/elasticsearch/elasticsearch.yml
    4. --17--取消注释,指定集群名字
    5. cluster.name: my-elk-cluster
    6. --23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
    7. node.name: node1
    8. --33--取消注释,指定数据存放路径
    9. path.data: /data/elk_data
    10. --37--取消注释,指定日志存放路径
    11. path.logs: /var/log/elasticsearch/
    12. --43--取消注释,改为在启动的时候不锁定内存
    13. bootstrap.memory_lock: false
    14. --55--取消注释,设置监听地址,0.0.0.0代表所有地址
    15. network.host: 0.0.0.0
    16. --59--取消注释,ES 服务的默认监听端口为9200
    17. http.port: 9200
    18. --68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
    19. discovery.zen.ping.unicast.hosts: ["node1", "node2"]

    查看配置文件,创建数据目录

    1. grep -v "^#" /etc/elasticsearch/elasticsearch.yml
    2. 4)创建数据存放路径并授权
    3. mkdir -p /data/elk_data
    4. chown elasticsearch:elasticsearch /data/elk_data/
    5. 5)启动elasticsearch是否成功开启
    6. systemctl start elasticsearch.service
    7. netstat -antp | grep 9200

    3.3 安装 Elasticsearch-head 插件

    编译安装node

    1. #上传软件包 node-v8.2.1.tar.gz 到/opt
    2. yum install gcc gcc-c++ make -y
    3. cd /opt
    4. tar zxvf node-v8.2.1.tar.gz
    5. cd node-v8.2.1/
    6. ./configure
    7. make && make install

    安装 phantomjs(前端的框架)

    1. #上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
    2. cd /opt
    3. tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
    4. cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
    5. cp phantomjs /usr/local/bin

    安装 Elasticsearch-head 数据可视化工具

    1. #上传软件包 elasticsearch-head.tar.gz 到/opt
    2. cd /opt
    3. tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
    4. cd /usr/local/src/elasticsearch-head/
    5. npm install

    修改 Elasticsearch 主配置文件

    1. vim /etc/elasticsearch/elasticsearch.yml
    2. ......
    3. --末尾添加以下内容--
    4. http.cors.enabled: true #开启跨域访问支持,默认为 false
    5. http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
    6. //重启es
    7. systemctl restart elasticsearch

    启动 elasticsearch-head 服务

    1. cd /usr/local/src/elasticsearch-head/
    2. npm run start &
    3. > elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
    4. > grunt server
    5. Running "connect:server" (connect) task
    6. Waiting forever...
    7. Started connect web server on http://localhost:9100
    8. #elasticsearch-head 监听的端口是 9100
    9. netstat -natp |grep 9100

    3.4  Kiabana 部署

    1. 1.安装 Kiabana
    2. #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
    3. cd /opt
    4. rpm -ivh kibana-5.5.1-x86_64.rpm
    5. 2.设置 Kibana 的主配置文件
    6. vim /etc/kibana/kibana.yml
    7. --2--取消注释,Kiabana 服务的默认监听端口为5601
    8. server.port: 5601
    9. --7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
    10. server.host: "0.0.0.0"
    11. --21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
    12. elasticsearch.url: "http://192.168.247.70:9200"
    13. --30--取消注释,设置在 elasticsearch 中添加.kibana索引
    14. kibana.index: ".kibana"
    15. 3.启动 Kibana 服务
    16. systemctl start kibana.service
    17. systemctl enable kibana.service
    18. netstat -natp | grep 5601

    4、部署logstash(192.168.247.60)

    1. 安装Java环境
    2. 安装logstash
    1. //安装Java环境
    2. yum -y install java
    3. java -version
    4. //安装logstash
    5. #上传软件包 logstash-5.5.1.rpm 到/opt目录下
    6. cd /opt
    7. rpm -ivh logstash-5.5.1.rpm
    8. systemctl start logstash.service
    9. systemctl enable logstash.service
    10. ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
    1. 在 Logstash 组件所在节点上新建一个 Logstash 配置文件
    1. cd /etc/logstash/conf.d/
    2. vim kafka.conf
    3. input {
    4. kafka {
    5. bootstrap_servers => "192.168.10.17:9092,192.168.10.21:9092,192.168.10.22:9092" #kafka集群地址
    6. topics => "httpd" #拉取的kafka的指定topic
    7. type => "httpd_kafka" #指定 type 字段
    8. codec => "json" #解析json格式的日志数据
    9. auto_offset_reset => "latest" #拉取最近数据,earliest为从头开始拉取
    10. decorate_events => true #传递给elasticsearch的数据额外增加kafka的属性数据
    11. }
    12. }
    13. output {
    14. if "access" in [tags] {
    15. elasticsearch {
    16. hosts => ["192.168.10.15:9200"]
    17. index => "httpd_access-%{+YYYY.MM.dd}"
    18. }
    19. }
    20. if "error" in [tags] {
    21. elasticsearch {
    22. hosts => ["192.168.10.15:9200"]
    23. index => "httpd_error-%{+YYYY.MM.dd}"
    24. }
    25. }
    26. stdout { codec => rubydebug }
    27. }
    28. #启动 logstash
    29. logstash -f kafka.conf

    三、验证

    访问192.168.247.20 apache,生成日志

     

  • 相关阅读:
    (C)一些题2
    Spring事务的传播机制
    反絮凝剂-氨碘肽滴眼液
    并发之线程安全
    反转字符串 反转字符串 || 反转字符串 |||
    C# [字节数组]与[16进制字符串]互相转换 - CodePlus系列
    Rust常见编程概念
    CSS变量之var()函数的应用——动态修改样式 & root的使用
    17.Redis系列之快照RDB方式持久化
    第十六章《正则表达式》第5节:正则表达式实战应用
  • 原文地址:https://blog.csdn.net/weixin_46254171/article/details/133012379