ELK

作者: 楠有枝 | 来源:发表于2020-05-26 09:53 被阅读0次

    elk+kafka+zookeeper超详细
    2019年08月11日 15:53:42 拿破仑快递 阅读数 148 标签: elk elk部署超详细
    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/yangpei1/article/details/98897548
    elk部署超详细
    一、简介:

    ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana

    1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。

    它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    2、Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。

    一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

    3、Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

    4、FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

    5、Kafka: 数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

    6、Zookeeper来协调管理Kafka日志队列最终推送给Logstash集群处理。

    在之前的搭建elk环境中,日志的处理流程为:filebeat --> logstash --> elasticsearch,随着业务量的增长,需要对架构做进一步的扩展,引入kafka集群。日志的处理流程变为:filebeat --> kafka --> logstash --> elasticsearch。架构图如下所示:
    在这里插入图片描述

    准备安装部署
    安装软件 主机名 IP地址 系统版本
    elasticsearch mes-1-zk 192.168.88.129 centos7.4–3G
    zookeeper/kafka/Logstash es-2-zk-log 192.168.88.131 centos7.4–2G
    head/Kibana es-3-head-kib-zk-File 192.168.88.132 centos7.4–2G
    环境 三台一样
    1、关闭防火墙
    systemctl stop firewalld && systemctl disable firewalld && setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
    2、三台都要部署java环境,kafka,logstash,elasticsearch,zookeeper都需要java环境
    [root@mes-1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
    [root@mes-1 ~]# cd /usr/local/
    [root@mes-1 local]# mv jdk1.8.0_191/ java
    [root@mes-1 local]# echo '
    JAVA_HOME=/usr/local/java
    PATH=JAVA_HOME/bin:PATH
    export JAVA_HOME PATH
    ' >>/etc/profile
    [root@mes-1 ~]# source /etc/profile
    3、ntpdate对时,kibana创建索引需要实时收集日志
    yum -y install ntpdate
    ntpdate -b ntp1.aliyun.com
    4、修改静态IP,一定要静态IP
    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="none"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="d4c4d1df-507f-4a75-a52a-b792ac5622c7"
    DEVICE="ens33"
    ONBOOT="yes"
    GATEWAY=192.168.88.2
    NATMASK=255.255.255.0
    IPADDR=192.168.88.129
    DNS1=8.8.8.8
    5、域名互相解析
    vim /etc/hosts
    192.168.88.129 mes-1-zk
    192.168.88.131 es-2-zk-log
    192.168.88.132 es-3-head-kib-zk-File
    6、三台分别设置一下用户名
    hostnamectl set-hostname mes-1-zk
    hostnamectl set-hostname es-2-zk-log
    hostnamectl set-hostname es-3-head-kib-zk-File
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    安装包
    Elasticsearch: 6.5.4 #https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
    Logstash: 6.5.4 #https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz
    Kibana: 6.5.4 #https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz
    Kafka: 2.11-2.1 #https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
    Filebeat: 6.5.4
    相应的版本最好下载对应的插件

    安装部署
    1.安装配置ES----只在第一台操作操作下面的部分
    (1) 创建运行ES的普通用户(因为生产环境都是普通用户)
    [root@mes-1 ~]# useradd elsearch
    [root@mes-1 ~]# echo “123456” | passwd --stdin “elsearch”
    (2)安装配置ES
    [root@mes-1 ~]# tar xzf elasticsearch-6.5.4.tar.gz -C /usr/local/
    [root@mes-1 ~]# cd /usr/local/elasticsearch-6.5.4/config/
    [root@mes-1 config]# ls
    elasticsearch.yml log4j2.properties roles.yml users_roles
    jvm.options role_mapping.yml users
    [root@mes-1 config]# cp elasticsearch.yml elasticsearch.yml.bak
    [root@mes-1 config]# vim elasticsearch.yml ----找个地方添加如下内容
    cluster.name: elk
    node.name: elk01
    node.master: true
    node.data: true
    path.data: /data/elasticsearch/data
    path.logs: /data/elasticsearch/logs
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false
    network.host: 0.0.0.0
    http.port: 9200

    discovery.zen.ping.unicast.hosts: [“192.168.88.129”, “192.168.88.131”,“192.168.88.132”]

    discovery.zen.minimum_master_nodes: 2

    discovery.zen.ping_timeout: 150s

    discovery.zen.fd.ping_retries: 10

    client.transport.ping_timeout: 60s

    http.cors.enabled: true
    http.cors.allow-origin: “*”

    配置项含义:
    cluster.name 集群名称,各节点配成相同的集群名称。
    node.name 节点名称,各节点配置不同。
    node.master 指示某个节点是否符合成为主节点的条件。
    node.data 指示节点是否为数据节点。数据节点包含并管理索引的一部分。
    path.data 数据存储目录。
    path.logs 日志存储目录。
    bootstrap.memory_lock 内存锁定,是否禁用交换。
    bootstrap.system_call_filter 系统调用过滤器。
    network.host 绑定节点IP。
    http.port rest api端口。
    discovery.zen.ping.unicast.hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能。
    discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是
    (N/2)+1,其中N是具有master资格的节点的数量。
    discovery.zen.ping_timeout 节点在发现过程中的等待时间。
    discovery.zen.fd.ping_retries 节点发现重试次数。
    http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。
    http.cors.allow-origin 允许的源地址。

    (3) 设置JVM堆大小
    [root@mes-1 config]# vim jvm.options ----将
    -Xms1g ----修改成 -Xms2g
    -Xmx1g ----修改成 -Xms2g
    或者:
    推荐设置为4G,请注意下面的说明:
    sed -i ‘s/-Xms1g/-Xms4g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options
    sed -i ‘s/-Xmx1g/-Xmx4g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options
    注意: 确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。 堆内存大
    小不要超过系统内存的50%

    (4)创建ES数据及日志存储目录
    [root@mes-1 ~]# mkdir -p /data/elasticsearch/{data,logs}

    (5)修改安装目录及存储目录权限
    [root@mes-1 ~]# chown -R elsearch:elsearch /data/elasticsearch
    [root@mes-1 ~]# chown -R elsearch:elsearch /usr/local/elasticsearch-6.5.4

    2.系统优化 下面两部都要做 不要忘了打乘号
    (1)增加最大文件打开数
    永久生效方法: echo “* - nofile 65536” >> /etc/security/limits.conf
    (2)增加最大进程数
    [root@mes-1 ~]# vim /etc/security/limits.conf —在文件最后面添加如下内容

    • soft nofile 65536
    • hard nofile 131072
    • soft nproc 2048
    • hard nproc 4096
      (3)增加最大内存映射数
      [root@mes-1 ~]# vim /etc/sysctl.conf —添加如下
      vm.max_map_count=262144
      vm.swappiness=0
      [root@mes-1 ~]# sysctl -p

    3启动ES
    [root@mes-1 ~]# su - elsearch
    Last login: Sat Aug 3 19:48:59 CST 2019 on pts/0
    [root@mes-1 ~]cd /usr/local/elasticsearch-6.5.4/ [root@mes-1 elasticsearch-6.5.4] ./bin/elasticsearch #先启动看看报错不,需要多等一会
    终止之后
    [root@mes-1 elasticsearch-6.5.4]nohup ./bin/elasticsearch & #放后台启动 [1] 11462 [root@mes-1 elasticsearch-6.5.4] nohup: ignoring input and appending output to ‘nohup.out’
    [root@mes-1 elasticsearch-6.5.4]$ tail -f nohup.out #看一下是否启动
    或者:
    su - elsearch -c “cd /usr/local/elasticsearch-6.5.4 && nohup bin/elasticsearch &”

    测试:浏览器访问http://192.168.88.129:9200/
    在这里插入图片描述

    tailf nohup.out

    [2019-08-11T11:42:55,923][INFO ][o.e.p.PluginsService ] [elk01] no plugins loaded
    这里显示没有插件安装

    最后一行显示
    [2019-08-11T11:43:13,070][INFO ][o.e.l.LicenseService ] [elk01] license [d380737f-c735-4a2b-8b9e-24a92bbc3dc9] mode [basic] - valid

    2、安装head监控插件(Web前端)----只需要安装一台就可以了。192.168.88.132
    (1)安装node 插件的依赖
    [root@es-3-head-kib ~]# wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
    [root@es-3-head-kib ~]# tar -zxf node-v4.4.7-linux-x64.tar.gz -C /usr/local
    [root@es-3-head-kib ~]# vim /etc/profile #添加如下变量
    NODE_HOME=/usr/local/node-v4.4.7-linux-x64
    PATH=NODE_HOME/bin:PATH
    export NODE_HOME PATH
    [root@es-3-head-kib ~]# source /etc/profile
    [root@es-3-head-kib ~]# node --version #检查node版本号
    v4.4.7
    (2)下载head插件
    [root@es-3-head-kib ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
    [root@es-3-head-kib ~]# cp master.zip /usr/local/
    [root@es-3-head-kib ~]# unzip -d /usr/local/ master.zip
    [root@es-3-head-kib ~]# cd /usr/local
    或者
    unzip –d /usr/local elasticsearch-head-master.zip
    (3)安装grunt
    [root@es-3-head-kib ~]# cd elasticsearch-head-master/
    [root@mes-3-head-kib elasticsearch-head-master]# npm install -g grunt-cli #时间会很长
    如果没有安装上多试几次就好了
    [root@es-3-head-kib elasticsearch-head-master]# grunt --version #检查grunt版本号
    (4)修改head源码
    [root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/Gruntfile.js (95
    左右)
    在这里插入图片描述
    添加hostname,注意在上一行末尾添加逗号,hostname 不需要添加逗号 !!!
    vim /usr/local/elasticsearch-head-master/_site/app.js +4395 (4359左右)
    原来是localhost,现在head插件没有安装在elastic search上,所以需要改ip来连接
    (5)下载head必要的文件
    [root@es-3-head-kib ~]# wget
    https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-
    x86_64.tar.bz2
    [root@es-3-head-kib ~]# yum -y install bzip2
    [root@es-3-head-kib ~]# tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/ #解压
    (6)运行head
    [root@es-3-head-kib ~]# cd /usr/local/elasticsearch-head-master/
    [root@es-3-head-kib elasticsearch-head-master]# npm install
    这里安装如果报错,也是多安装几次就好了,而且这个不重要,可以先放在一边先做下面的,因为下载时间太长了,再打开一个窗口
    npm ERR! node v4.4.7
    npm ERR! npm v2.15.8
    npm ERR! code ELIFECYCLE
    npm ERR! phantomjs-prebuilt@2.1.16 install: node install.js
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script ‘node install.js’.
    npm ERR! This is most likely a problem with the phantomjs-prebuilt package,
    npm ERR! not with npm itself.
    npm ERR! Tell the author that this fails on your system:
    npm ERR! node install.js
    npm ERR! You can get information on how to open an issue for this project with:
    npm ERR! npm bugs phantomjs-prebuilt
    npm ERR! Or if that isn’t available, you can get their info via:
    npm ERR!
    npm ERR! npm owner ls phantomjs-prebuilt
    npm ERR! There is likely additional logging output above.
    npm ERR! Please include the following file with any support request:
    npm ERR! /usr/local/elasticsearch-head-master/npm-debug.log
    上面是报错,多安装几次就好了

    grunt-contrib-jasmine@1.0.3 node_modules/grunt-contrib-jasmine
    ├── sprintf-js@1.0.3
    ├── lodash@2.4.2
    ├── es5-shim@4.5.13
    ├── chalk@1.1.3 (escape-string-regexp@1.0.5, supports-color@2.0.0, ansi-styles@2.2.1, strip-
    ansi@3.0.1, has-ansi@2.0.0)
    ├── jasmine-core@2.99.1
    ├── rimraf@2.6.3 (glob@7.1.4)
    └── grunt-lib-phantomjs@1.1.0 (eventemitter2@0.4.14, semver@5.7.0, temporary@0.0.8, phan
    [root@es-3-head-kib elasticsearch-head-master]# nohup grunt server & 后台运行
    (7)测试
    访问http://192.168.88.132:9100
    在这里插入图片描述

    3、kibana部署
    系统类型:Centos7.5 节点IP:192.168.88.132 D 软件版本:nginx-1.14.2、kibana-6.5.4-linux-x86_64.tar.gz kibana只是展示日志的画面,所以最后部署也可以
    1

    1. 安装配置Kibana
      [root@es-3-head-kib ~]# tar zvxf kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/
      [root@es-3-head-kib ~]# cd /usr/local/kibana-6.5.4-linux-x86_64/config/
      [root@es-3-head-kib config]# vim kibana.yml
      server.port: 5601
      server.host: "192.168.88.132"
      elasticsearch.url: "http://192.168.88.129:9200"
      kibana.index: ".kibana"

    1
    2
    3
    4
    5
    6
    7
    8
    注意这里版本不一样,7.2和6.5的配置文件内容不一样

    配置项含义
    server.port kibana服务端口,默认5601
    server.host kibana主机IP地址,默认localhost
    elasticsearch.url 用来做查询的ES节点的URL,默认http://localhost:9200
    kibana.index kibana在Elasticsearch中使用索引来存储保存的searches, visualizations和
    dashboards,默认.kibana

    启动
    [root@es-3-head-kib config]# cd ..
    [root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup ./bin/kibana &
    [1] 12054
    [root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup: ignoring input and appending output to‘nohup.out’
    访问测试http://192.168.88.132:5601
    1
    2
    3
    4
    5
    6
    2.安装配置Nginx反向代理
    (1)配置YUM源:
    [root@es-3-head-kib ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    (2)安装:
    [root@es-3-head-kib ~]# yum install -y nginx 注意:httpd-tools用于生成nginx认证访问的用户密码文件
    systemctl restart nginx
    (3)配置反向代理
    [root@es-3-head-kib ~]# cd /etc/nginx/conf.d/
    [root@es-3-head-kib conf.d]# cp default.conf nginx.conf
    [root@es-3-head-kib conf.d]# mv default.conf default.conf.bak
    [root@es-3-head-kib conf.d]# vim nginx.conf
    [root@es-3-head-kib conf.d]# cat nginx.conf
    server {
    listen 80;
    server_name 192.168.88.132;

    charset koi8-r;

    access_log /var/log/nginx/host.access.log main;

    access_log off;
    location / {
    proxy_pass http://192.168.88.132:5601;
    proxy_set_header Host host:5601; proxy_set_header X-Real-IPremote_addr;
    proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; } location /status { stub_status on; #开启网站监控状态 access_log /var/log/nginx/kibana_status.log; #监控日志 auth_basic "NginxStatus"; } location /head/ { proxy_pass http://192.168.246.235:9100; proxy_set_header Hosthost:9100;
    proxy_set_header X-Real-IP remote_addr; proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
    proxy_set_header Via "nginx";
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    访问http://192.168.88.132
    1
    在这里插入图片描述

    4、部署kafka集群 三台都要部署
    1.安装配置Zookeeper
    Kafka运行依赖ZK,Kafka官网提供的tar包中,已经包含了ZK,这里不再额下载ZK程序。

    tar xzvf kafka_2.11-2.1.0.tgz -C /usr/local/
    sed -i 's/[#]/#&/' /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
    vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
    dataDir=/opt/data/zookeeper/data
    dataLogDir=/opt/data/zookeeper/logs
    clientPort=2181
    tickTime=2000
    initLimit=20
    syncLimit=10
    server.1=192.168.88.129:2888:3888
    server.2=192.168.88.131:2888:3888
    server.3=192.168.88.132:2888:3888

    注意这里的顺序,1,2,3后面对应id号 1,2,3

    创建data、log目录
    mkdir -p /opt/data/zookeeper/{data,logs}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    配置项含义
    dataDir ZK数据存放目录。
    dataLogDir ZK日志存放目录。
    clientPort 客户端连接ZK服务的端口。
    tickTime ZK服务器之间或客户端与服务器之间维持心跳的时间间隔。
    initLimit 允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以
    tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
    syncLimit Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通
    信,那么此follower将会被丢弃。
    server.1=192168.88.129:2888:3888 2888是follower与leader交换信息的端口,3888是当leader挂了时用来
    执行选举时服务器相互通信的端口。

    2、配置kafka
    sed -i 's/[#]/#&/' /usr/local/kafka_2.11-2.1.0/config/server.properties
    vim /usr/local/kafka_2.11-2.1.0/config/server.properties #在最后添加
    broker.id=1 #注意这里要和server1,2,3对应
    listeners=PLAINTEXT://192.168.88.129:9092 #本机的kafka ip
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/opt/data/kafka/logs
    num.partitions=6
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=2
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.retention.hours=168
    log.segment.bytes=536870912
    log.retention.check.interval.ms=300000
    zookeeper.connect=192.168.88.129:2181,192.168.88.131:2181,192.168.88.132:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
    创建目录
    mkdir -p /opt/data/kafka/logs
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    三台分别创建myid文件
    echo 1 > /opt/data/zookeeper/data/myid #myid号按顺序排
    echo 2 > /opt/data/zookeeper/data/myid #myid号按顺序排
    echo 3 > /opt/data/zookeeper/data/myid #myid号按顺序排
    1
    2
    3
    4
    配置项含义:
    broker.id 每个server需要单独配置broker id,如果不配置系统会自动配置。
    listeners 监听地址,格式PLAINTEXT://IP:端口。
    num.network.threads 接收和发送网络信息的线程数。
    num.io.threads 服务器用于处理请求的线程数,其中可能包括磁盘I/O。
    socket.send.buffer.bytes 套接字服务器使用的发送缓冲区(SO_SNDBUF)
    socket.receive.buffer.bytes 套接字服务器使用的接收缓冲区(SO_RCVBUF)
    socket.request.max.bytes 套接字服务器将接受的请求的最大大小(防止OOM)
    log.dirs 日志文件目录。
    num.partitions partition数量。
    num.recovery.threads.per.data.dir 在启动时恢复日志、关闭时刷盘日志每个数据目录的线程的数量,默认
    1。
    offsets.topic.replication.factor 偏移量话题的复制因子(设置更高保证可用),为了保证有效的复制,
    偏移话题的复制因子是可配置的,在偏移话题的第一次请求的时候可用的broker的数量至少为复制因子的大小,否则要么
    话题创建失败,要么复制因子取可用broker的数量和配置复制因子的最小值。
    log.retention.hours 日志文件删除之前保留的时间(单位小时),默认168
    log.segment.bytes 单个日志文件的大小,默认1073741824
    log.retention.check.interval.ms 检查日志段以查看是否可以根据保留策略删除它们的时间间隔。
    zookeeper.connect ZK主机地址,如果zookeeper是集群则以逗号隔开。
    zookeeper.connection.timeout.ms 连接到Zookeeper的超时时间。

    3 、启动、验证ZK集群
    (1)启动 先启动zookeeper
    在三个节点依次执行:
    cd /usr/local/kafka_2.11-2.1.0/
    nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

    三台都启动以后查看一下端口,这里端口正常就可以进行下一步了
    ss -anpt | grep 2181
    [root@es-3-head-kib-zk-file kafka_2.11-2.1.0]# ss -anpt | grep 2181
    LISTEN 0 50 :::2181 :::* users:(("java",pid=84513,fd=97))
    (2)验证
    yum install -y nc
    [root@es-2-zk-log kafka_2.11-2.1.0]# echo conf | nc 127.0.0.1 2181
    clientPort=2181
    dataDir=/opt/data/zookeeper/data/version-2
    dataLogDir=/opt/data/zookeeper/logs/version-2
    tickTime=2000
    maxClientCnxns=60
    minSessionTimeout=4000
    maxSessionTimeout=40000
    serverId=1
    initLimit=20
    syncLimit=10
    electionAlg=3
    electionPort=3888
    quorumPort=2888
    peerType=0
    (3)启动kafka
    在三个节点依次执行
    [root@es-2-zk-log ~]# cd /usr/local/kafka_2.11-2.1.0/
    [root@es-2-zk-log kafka_2.11-2.1.0]# nohup bin/kafka-server-start.sh config/server.properties &

    都执行完了看一下nohup.out
    发现第二台机器报错了
    [2019-08-11 13:20:00,428] INFO Got user-level KeeperException when processing sessionid:0x30000fef0f00000 type:multi cxid:0x38 zxid:0x10000003b txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path:/admin/preferred_replica_election Error:KeeperErrorCode = NoNode for /admin/preferred_replica_election (org.apache.zookeeper.server.PrepRequestProcessor)
    好像忘了创建目录
    mkdir -p /opt/data/kafka/logs
    杀掉kafka的进程又重启了一次OK
    [2019-08-11 13:20:00,253] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
    [2019-08-11 13:29:56,673] INFO [GroupMetadataManager brokerId=1] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)

    (2)验证
    创建topic
    [root@mes-1-zk kafka_2.11-2.1.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic 最好在第一台机器上创建
    Created topic "testtopic".

    三台机器上都查询一下
    bin/kafka-topics.sh --zookeeper 192.168.88.129:2181 --list
    显示testtopic就算可以了
    模拟消息生产和消费 发送消息到192.168.88.129
    [root@mes-1-zk kafka_2.11-2.1.0]# bin/kafka-console-producer.sh --broker-list 192.168.88.129:9092 --topic testtopic

    hello
    [root@es-2-zk-log kafka_2.11-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.129:9092 --topic testtopic --from-beginning
    hello 接收到消息 可能会有延迟比较慢

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    5、Logstash部署----192.168.88.131
    logstash-6.5.4.tar.gz

    (1).安装配置Logstash
    [root@es-2-zk-log ~]# tar xvzf logstash-6.5.4.tar.gz -C /usr/local/
    (2)配置
    创建目录,我们将所有input、filter、output配置文件全部放到该目录中。
    安装nginx这里是要收集这个nginx的日志
    rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    [root@es-2-zk-log ~]# yum install -y nginx
    [root@es-2-zk-log ~]# systemctl start nginx
    [root@es-2-zk-log ~]# systemctl enable nginx
    多访问几次页面,,不然后面没有日志产生无法排错
    [root@es-2-zk-log ~]# mkdir -p /usr/local/logstash-6.5.4/etc/conf.d
    [root@es-2-zk-log ~]# cd /usr/local/logstash-6.5.4/etc/conf.d/
    [root@es-2-zk-log conf.d]# vim input.conf #---在下面添加
    input {
    kafka { #指定kafka服务
    type => "nginx_log"
    codec => "json" #通用选项,用于输入数据的编解码器
    topics => "nginx" #这里定义的topic
    decorate_events => true #此属性会将当前topic、group、partition等信息也带到message中
    bootstrap_servers => "192.168.88.129:9092, 192.168.88.131:9092, 192.168.88.132:9092"

    }
    }
    [root@es-2-zk-log conf.d]# vim output.conf
    output{ #输出插件,将事件发送到特定目标

    stdout{

    codec => "rubydebug"

    }

    elasticsearch { #输出到es
    hosts => ["192.168.88.129:9200"] #指定es服务的ip加端口
    index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名称,定义输出的格式
    }
    }

    这里先不要启动,等配置完filebeat再启动
    [root@es-2-zk-log conf.d]# cd /usr/local/logstash-6.5.4/
    [root@es-2-zk-log logstash-6.5.4]# nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Filebeat 部署--------192.168.88.131
    为什么用 Filebeat ,而不用原来的 Logstash 呢?
    原因很简单,资源消耗比较大。
    由于 Logstash 是跑在 JVM 上面,资源消耗比较大,后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级
    的 Agent 叫 Logstash-forwarder。
    后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为
    Filebeat。
    Filebeat 需要部署在每台应用服务器上,可以通过 Salt 来推送并安装配置

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
    tar xzvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/
    cd /usr/local/
    mv filebeat-6.5.4-linux-x86_64 filebeat
    cd filebeat/
    修改配置
    修改 Filebeat 配置,支持收集本地目录日志,并输出日志到 Kafka 集群中
    mv filebeat.yml filebeat.yml.bak
    vim filebeat.yml

    filebeat.prospectors:

    • input_type: log #指定输入的类型
      paths:
    • /var/log/nginx/*.log #日志的路径

    json.keys_under_root: true

    json.add_error_key: true

    json.message_key: log

    output.kafka:
    hosts: [“192.168.88.129:9092”,“192.168.88.131:9092”,“192.168.88.132:9092”]kafka服务器
    topic: 'nginx' #输出到kafka中的topic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    注意这里是剧本的格式 如果格式不对会报错
    filebeat.prospectors:(冒号后面有个空格)

    • input_type: log
      (这里两个空格)paths:
      (这里两个空格)- /var/log/nginx/*.log

    json.keys_under_root: true

    json.add_error_key: true

    json.message_key: log

    output.kafka:(冒号后面有个空格)
    (这里两个空格)hosts: [“192.168.88.129:9092”,“192.168.88.131:9092”,“192.168.88.132:9092”]
    (这里两个空格)topic: ‘nginx’

    启动
    nohup ./filebeat -e -c filebeat.yml &
    tail -f nohup.out
    访问nginx页面,这里显示已经抓取到日志了

    验证kafka是否生成topic
    [root@es-3-head-kib filebeat]# cd /usr/local/kafka_2.11-2.1.0/
    [root@es-3-head-kib kafka_2.11-2.1.0]# bin/kafka-topics.sh --zookeeper 192.168.246.231:2181 --
    list
    __consumer_offsets
    nginx #已经生成topic
    testtopic

    现在启动logstash
    cd /usr/local/logstash-6.5.4/
    nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &

    发现报错了 查看nohup.out
    [2019-08-11T15:05:01,918][ERROR][logstash.config.sourceloader] Could not fetch all the sources {:exception=>LogStash::ConfigLoadingError, :message=>"The following config files contains non-ascii characters but are not UTF-8 encoded ["/usr/local/logstash-6.5.4/etc/conf.d/filebeat-6.5.4-linux-x86_64.tar.gz"]",

    配置文件里竟然有个压缩包,删掉就好了
    再次查看一下
    [root@es-2-zk-log conf.d]# ls
    input.conf output.conf

    再次杀进程启动一下
    nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
    tailf nohup.out 下面就好了
    [2019-08-11T15:21:08,208][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator] [Consumer clientId=logstash-0, groupId=logstash] Setting newly assigned partitions [nginx-1, nginx-0, nginx-3, nginx-2, nginx-5, nginx-4]
    [2019-08-11T15:21:08,607][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    访问http://192.168.88.132:9100/ 这里需要等一两分钟
    1
    在这里插入图片描述

    访问kibana页面 http://192.168.88.132
    创建索引
    在这里插入图片描述
    选择第一个时间
    在这里插入图片描述
    继续访问·nginx 实时产生日志
    在这里插入图片描述

    ELK+Filebeat+Kafka+ZooKeeper构建大数据日志分析平台
    阅读数 1192

    本来从原公司离职以后,应该去约好的公司去面试的。但是家里出了一点急事就回老家了。因此利用在老家的这段时间来整理下之前的公司项目里面用的的知识点和一些经验。原来的项目数据采集部分都是使用flume+ka...
    博文
    来自: xujing

    相关文章

      网友评论

          本文标题:ELK

          本文链接:https://www.haomeiwen.com/subject/utaisctx.html