kafka+logstash+elasticsearch+kibana实现数据发送和监控

背景

需要kafka将数据发送到logstash再发送给另外一个服务器的kafka,elasticsearch和kibana起到监控的作用,实现可视化。具体架构图如下:
kafka+logstash+elasticsearch+kibana实现数据发送和监控_第1张图片
这里分析logstash以后部分。

kafka

kafka的安装在上一篇博客中已经讲过了:https://blog.csdn.net/ali_lili/article/details/107338987

logstash

logstash相当于一个数据流,将kafka收到的数据进行封装,然后发送到其他地方,这里是发送到kafka,可以根据自己的实际情况来决定。
安装
上传压缩包,然后解压,参考命令

rz
tar -zxvf  压缩包名字

测试

bin/logstash -e 'input { stdin { } } output { stdout {} }'

然后在页面输入hello world ,同样可以在控制台看到自己发送的数据
遇到的难题
当我们发送数据的时候,logstash会将我们的数据封装成一个json格式,我们的数据会放到message字段里面。那么问题来了,我发送的是一个json数据,她这样子就会把我的数据封装成两层json,但是我只要一层就够了,就是我自己发送的那个,但是似乎做不到,已经搞了很久。都没有查到解决方法,希望有人有解决方法可以通知一下。
所以我直接在logstash的filter里面对数据进行加工,就是他最后输出的数据格是json,我就把这个json的字段名改成自己的json的字段名,这一步在配置文件中体现
修改配置文件

cd config
vi logstash-sample.conf
input {
  kafka {
       bootstrap_servers => "ip:9092"
        topics => ["text"]
  }
}

filter {
mutate {
               remove_field => "@timestamp"
                remove_field => "@version"
                remove_field => "tags"
              remove_field => "host"
  }

 ruby {
                code => "
                        array1 = event.get('message').split(';,;')
                        array1.each do |temp1|
                                if temp1.nil? then
                                        next
                                end
                                array2 = temp1.split('|')
                                key = array2[0]
                                value = array2[1]
                                if key.nil? then
                                        next
                                end
                                event.set(key, value)
                        end
                "
                remove_field => [ "message" ]



       }
}
output {
                     
     kafka{
       codec => json {
            charset => "UTF-8"
        }
   
   topic_id => "test"
    bootstrap_servers => "ip:9092"

  }
 elasticsearch {
             #The operation on ES
     hosts  => "ip:9200" #ElasticSearch host, can be array.
    index  => "logstash"         #The index to write data to.
  }
}


运行

bin/logstash -f  config/logstash-sample.conf

elasticsearch

在上面logstash的配置文件可以看到,在output里面是将数据发送到elasticsearch的。
安装
同样是上传压缩包和解压
修改配置文件
需要修改的如下

cluster.name: imooc-elasticsearch
node.name: es-node0
network.host: ip
http.port: 9200
cluster.initial_master_nodes: ["es-node0"]  #一定要,名字是node.name的名字,没有这个会报错

创建用户
elasticsearch是不可以在root的账号下面运行的。所以这个时候需要创建另外一个用户,但是如果已经有其他的用户了,可以省略。

#切换到local目录
cd /usr/local
#创建一个用户分组
groupadd esxwhy
#创建一个用户,设置密码为123456
useradd esmark -g esxwhy -p 123456
#为该用户授权
chown -R esmark:esxwhy elasticsearch-6.4.3
#切换用户
su esmark
#修改/etc/sysctl.conf文件
#切换到root账户下进行操作
vi /etc/sysctl.conf
#在最后面加上
vm.max_map_count=655360
#然后进入到/ect目录:
cd /etc
sysctl -p
#修改/etc/security/limits.conf文件
vi /etc/security/limits.conf
#把下面代码添加到最后
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
#关闭防火墙,访问首页
systemctl stop firewalld.service

启动

bin/elasticsearch

kibana

kibana是起到一个可视化的作用
安装
省略
修改配置文件
需要修改的配置如下

server.port: 5601
server.host: ip
elasticsearch.hosts: "http://ip:9200"


解决权限问题
与elasticsearch一样,因为不能使用root启动,所以需要解决权限的问题

#解决权限问题:
chown -R elsearch:elsearch /home/es/kibana-7.6.1-linux-x86_64/
# 修改kibana所在文件夹的权限
chmod 770  /home/es/kibana-7.6.1-linux-x86_64

启动

bin/kibana

结果

创建index
kafka+logstash+elasticsearch+kibana实现数据发送和监控_第2张图片
kafka+logstash+elasticsearch+kibana实现数据发送和监控_第3张图片
查看数据
kafka+logstash+elasticsearch+kibana实现数据发送和监控_第4张图片

你可能感兴趣的:(kafka+logstash+elasticsearch+kibana实现数据发送和监控)