• Elk+Filebeat+Kafka实现日志收集


    Elk+Filebeat+Kafka实现日志收集(本机nginx)

    部署Zookeeper

    1.实验组件

    1. #准备3台服务器做Zookeeper集群
    2. 20.0.0.10
    3. 20.0.0.20
    4. 20.0.0.30

    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
    8. #将apache-zookeeper-3.5.7-bin.tar.gz压缩包上传至/opt目录

    3.安装Zookeeper

    1. #三台服务器一齐操作
    2. cd /opt
    3. tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
    4. mv apache-zookeeper-3.5.7-bin /opt/zookeeper
    5. #修改配置文件
    6. cd /opt/zookeeper/conf/
    7. cp zoo_sample.cfg zoo.cfg
    8. vim zoo.cfg
    9. --2--
    10. tickTime=2000
    11. #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
    12. --5--
    13. initLimit=10
    14. #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
    15. --8--
    16. syncLimit=5
    17. #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
    18. --12--修改
    19. dataDir=/opt/zookeeper/data
    20. #指定保存Zookeeper中的数据的目录,目录需要单独创建
    21. --添加--
    22. dataLogDir=/opt/zookeeper/logs
    23. #指定存放日志的目录,目录需要单独创建
    24. --15--
    25. clientPort=2181
    26. #客户端连接端口
    27. --末尾添加集群信息--
    28. server.1=20.0.0.10:3188:3288
    29. server.2=20.0.0.20:3188:3288
    30. server.3=20.0.0.30:3188:3288

    1. #在每个节点上创建数据目录和日志目录
    2. mkdir /opt/zookeeper/data
    3. mkdir /opt/zookeeper/logs
    4. #在每个节点的dataDir指定的目录下创建一个 myid 的文件,不同节点分配123
    5. echo 1 > /opt/zookeeper/data/myid
    6. echo 2 > /opt/zookeeper/data/myid
    7. echo 3 > /opt/zookeeper/data/myid
    8. #配置 Zookeeper 启动脚本
    9. vim /etc/init.d/zookeeper
    10. #!/bin/bash
    11. #chkconfig:2345 20 90
    12. #description:Zookeeper Service Control Script
    13. ZK_HOME='/opt/zookeeper'
    14. case $1 in
    15. start)
    16. echo "---------- zookeeper 启动 ------------"
    17. $ZK_HOME/bin/zkServer.sh start
    18. ;;
    19. stop)
    20. echo "---------- zookeeper 停止 ------------"
    21. $ZK_HOME/bin/zkServer.sh stop
    22. ;;
    23. restart)
    24. echo "---------- zookeeper 重启 ------------"
    25. $ZK_HOME/bin/zkServer.sh restart
    26. ;;
    27. status)
    28. echo "---------- zookeeper 状态 ------------"
    29. $ZK_HOME/bin/zkServer.sh status
    30. ;;
    31. *)
    32. echo "Usage: $0 {start|stop|restart|status}"
    33. esac
    34. #设置开机自启
    35. chmod +x /etc/init.d/zookeeper
    36. chkconfig --add zookeeper
    37. #分别启动 Zookeeper
    38. service zookeeper start
    39. #查看当前状态
    40. service zookeeper status

    部署Kafka(3.4.1版本)

    1.安装Kafka

    1. cd /opt
    2. --上传kafka_2.13-3.4.1.tgz--
    3. tar -xf kafka_2.13-3.4.1.tgz
    4. mv kafka_2.13-3.4.1 kafka
    5. cd kafka/config/
    6. cp server.properties server.properties.bak
    7. vim server.properties
    8. --24--
    9. broker.id=1
    10. #broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=2、broker.id=3
    11. --34--
    12. listeners=PLAINTEXT://20.0.0.10:9092
    13. #每台服务器分别为102030,不用加地址映射
    14. --62--
    15. log.dirs=/var/log/kafka
    16. #kafka运行日志存放的路径,也是数据存放的路径
    17. --125--
    18. zookeeper.connect=20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181
    19. #配置连接Zookeeper集群地址
    20. #修改全局配置
    21. vim /etc/profile
    22. --添加--
    23. export KAFKA_HOME=/opt/kafka
    24. export PATH=$PATH:$KAFKA_HOME/bin
    25. source /etc/profile
    1. #配置Zookeeper启动脚本
    2. vim /etc/init.d/kafka
    3. #!/bin/bash
    4. #chkconfig:2345 22 88
    5. #description:Kafka Service Control Script
    6. KAFKA_HOME='/opt/kafka'
    7. case $1 in
    8. start)
    9. echo "---------- Kafka 启动 ------------"
    10. ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
    11. ;;
    12. stop)
    13. echo "---------- Kafka 停止 ------------"
    14. ${KAFKA_HOME}/bin/kafka-server-stop.sh
    15. ;;
    16. restart)
    17. $0 stop
    18. $0 start
    19. ;;
    20. status)
    21. echo "---------- Kafka 状态 ------------"
    22. count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
    23. if [ "$count" -eq 0 ];then
    24. echo "kafka is not running"
    25. else
    26. echo "kafka is running"
    27. fi
    28. ;;
    29. *)
    30. echo "Usage: $0 {start|stop|restart|status}"
    31. esac
    32. #设置开机自启
    33. chmod +x /etc/init.d/kafka
    34. chkconfig --add kafka
    35. #分别启动Kafka
    36. service kafka start

    2.命令行测试

    1. #创建topic
    2. kafka-topics.sh --create --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --replication-factor 2 --partitions 3 --topic test1
    3. #查看当前服务器中的所有 topic
    4. kafka-topics.sh --list --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092
    5. #发布消息
    6. kafka-console-producer.sh --broker-list 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic test1
    7. #消费消息
    8. kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic test1 --from-beginning
    9. #修改分区数
    10. kafka-topics.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --alter --topic test1 --partitions 6
    11. #删除 topic
    12. kafka-topics.sh --delete --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic test1

    部署Filebeat 

     1.安装Filebeat

    1. #10
    2. cd /opt/
    3. --上传filebeat-6.7.2-linux-x86_64.tar.gz--
    4. tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
    5. mv filebeat-6.7.2-linux-x86_64 filebeat
    6. vim /etc/logstash/logstash.yml
    7. --64--
    8. path.config: /opt/log
    9. systemctl restart logstash

    2.时间同步

    1. #所有节点
    2. yum -y install ntpdate
    3. ntpdate ntp.aliyun.com
    4. date

    3.配置filebeat

    1. #给nginx日志文件赋权
    2. cd /var/log/nginx/
    3. chmod 777 access.log error.log

    1. #配置filebeat
    2. cd /opt/filebeat
    3. vim filebeat.yml
    4. filebeat.inputs:
    5. - type: log
    6. enabled: true
    7. paths:
    8. - /var/log/nginx/access.log
    9. - /var/log/nginx/error.log
    10. tags: ["nginx"]
    11. fields:
    12. service_name: 20.0.0.10_nginx
    13. log_type: nginx
    14. from: 20.0.0.10
    15. output.kafka:
    16. enabled: true
    17. hosts: ["20.0.0.10:9092","20.0.0.20:9092","20.0.0.30:9092"]
    18. topic: "nginx"
    19. --------------Elasticsearch output-------------------
    20. (全部注释掉)
    21. ----------------Logstash output---------------------
    22. (全部注释掉)
    23. nohup ./filebeat -e -c filebeat.yml > filebeat.out &
    24. #启动filebeat

    4.配置logstash

    1. cd /opt/log/
    2. vim kafka.conf
    3. input {
    4. kafka {
    5. bootstrap_servers => "20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092"
    6. topics => "nginx"
    7. type => "nginx_kafka"
    8. codec => "json"
    9. auto_offset_reset => "earliest"
    10. decorate_events => true
    11. }
    12. }
    13. output {
    14. if "nginx" in [tags] {
    15. elasticsearch {
    16. hosts => ["20.0.0.20:9200","20.0.0.30:9200"]
    17. index => "nginx_access-%{+YYYY.MM.dd}"
    18. }
    19. }
    20. stdout { codec => rubydebug }
    21. }
    22. logstash -f kafka.conf --path.data /opt/test1

    日志收集(远程Apache+Mysql)

    部署Filebeat

    1.安装配置filebeat

    1. #收集81服务器上的mysql和apache日志
    2. cd /opt/
    3. --上传filebeat-6.7.2-linux-x86_64.tar.gz--
    4. tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
    5. mv filebeat-6.7.2-linux-x86_64 filebeat
    6. cd filebeat/
    7. vim filebeat.yml
    8. filebeat.inputs:
    9. - type: log
    10. enabled: true
    11. paths:
    12. - /etc/httpd/logs/access_log
    13. - /etc/httpd/logs/error_log
    14. tags: ["httpd_81"]
    15. fields:
    16. service_name: 20.0.0.81_httpd
    17. log_type: httpd
    18. from: 20.0.0.81
    19. - type: log
    20. enabled: true
    21. paths:
    22. - /usr/local/mysql/data/mysql_general.log
    23. tags: ["mysql_81"]
    24. fields:
    25. service_name: 20.0.0.81_mysql
    26. log_type: mysql
    27. from: 20.0.0.81
    28. output.kafka:
    29. enabled: true
    30. hosts: ["20.0.0.10:9092","20.0.0.20:9092","20.0.0.30:9092"]
    31. topic: "httpdmysql"
    32. --------------Elasticsearch output-------------------
    33. (全部注释掉)
    34. ----------------Logstash output---------------------
    35. (全部注释掉)
    36. nohup ./filebeat -e -c filebeat.yml > filebeat.out &
    37. #启动filebeat

    2.配置logstash

    1. 10
    2. cd /opt/log/
    3. vim 81_a+m.conf
    4. input {
    5. kafka {
    6. bootstrap_servers => "20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092"
    7. topics => "httpdmysql"
    8. type => "httpd+mysql_kafka"
    9. codec => "json"
    10. auto_offset_reset => "earliest"
    11. decorate_events => true
    12. }
    13. }
    14. output {
    15. if "httpd_81" in [tags] {
    16. elasticsearch {
    17. hosts => ["20.0.0.20:9200","20.0.0.30:9200"]
    18. index => "nginx_access-%{+YYYY.MM.dd}"
    19. }
    20. }
    21. if "mysql_81" in [tags] {
    22. elasticsearch {
    23. hosts => ["20.0.0.20:9200","20.0.0.30:9200"]
    24. index => "nginx_access-%{+YYYY.MM.dd}"
    25. }
    26. }
    27. stdout { codec => rubydebug }
    28. }
    29. logstash -f 81_a+m.conf --path.data /opt/test2

  • 相关阅读:
    vue中使用swiper的时候第二轮事件不会触发
    小技巧(12):关于PC端简单的视频剪辑处理中,bandicam(录制)、pr(配音)、pr(导出)、剪映(字幕识别)、pr(最终版导出)的全过程及基础设置
    Tomcat动静分离
    【Java】国密SM3/SM4(附工具类)
    string操作
    js箭头函数
    /usr/bin/curl: Argument list too long
    AD620A运算放大器的原理、应用和性能特点 | 百能云芯
    性能测试详解(理论篇)
    算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)
  • 原文地址:https://blog.csdn.net/pupcarrot/article/details/134708899