Filebeat+Kafka+Logstash+ElasticSearch+Kibana+elasticsearch-head搭建

Filebeat+Kafka+Logstash+ElasticSearch+Kibana+elasticsearch-head搭建

ELK Stack这套东西是什么,看这篇文章的估计都有所了解,我这里也不介绍了,这里我只是把我在实际项目中搭建这套环境的过程和笔记分享给大家。如果有什么问题可以留言交流

安装包下载

安装包自己到官网下载,我使用的版本是6.4.0
filebeat-6.4.0-linux-x86_64.tar.gz
logstash-6.4.0.tar.gz
elasticsearch-6.4.0.tar.gz
kibana-6.4.0-linux-x86_64.tar.gz

节点部署
192.168.0.94 filebeat,elasticsearch,kibana
192.168.0.131 elasticsearch-head,logstash

安装

上传安装包

scp *.tar.gz [email protected]:/home/soft/elk/6.4.0

登录0.94主机并解压所有安装包

elasticsearch

创建elastic用户组及elastic用户

elasticsearch不能使用root启动,不然会报错

groupadd elastic
useradd elastic -g elastic -p 123456

更改elk文件夹及内部文件的所属用户及组为elastic:elastic

chown -R elastic:elastic /home/soft/elk

切换到elastic用户再启动

su elastic
./bin/elasticsearch

停止es

jps
kill -9 {jps出来的进程编码}

遇到的问题与解决方法

  1. 问题一,启动报错
[2019-04-04T15:38:50,451][ERROR][o.e.b.Bootstrap          ] [Y_O2LI0] node validation exception
[2] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

虚拟内存数量超标,Linux限制一个进程可访问的VMA(虚拟内存)数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。

使用root用户修改/etc/sysctl.conf文件

vim /etc/sysctl.conf

添加内容
vm.max_map_count = 262144
检查查看

sysctl -p
  1. 问题二,不能访问9200端口

修改es配置文件config/elasticsearch.yml

vim config/elasticsearch.yml 

添加以下配置(属于gateway属性)

http.cors.enabled: true
http.cors.allow-origin: "*"

ip:9200即可访问

  1. 问题三,低版本linux不支持Seccomp

修改es配置文件config/elasticsearch.yml

vim config/elasticsearch.yml 

添加以下配置(属于Memory属性)

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

elasticsearch.yml配置如下

cluster.name: appes
node.name: app-es-node-1
path.data: /home/soft/elk/6.4.0/elasticsearch-6.4.0/data
path.logs: /home/soft/elk/6.4.0/elasticsearch-6.4.0/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

cat config/elasticsearch.yml |grep -v '^#'使用此命令查看

kibana

解压并修改配置文件

tar -zxvf kibana-6.4.0-linux-x86_64.tar.gz
cd kibana-6.4.0-linux-x86_64
vim config/kibana.yml

修改内容如下

server.port: 5601
server.host: "192.168.0.94"
server.name: "kibana94"
elasticsearch.url: "http://192.168.0.94:9200"

启动

cd bin
nohup ./kibana &

访问与验证:ip:5601

elasticsearch-head

需要准备Node.js环境与Grunt环境

1. install node

下载,解压,设置环境变量,生效。(0.94已经有node v6.11.5,此处未安装,经测试有问题,最好使用最新版本)

wget http://cdn.npm.taobao.org/dist/node/v10.15.3/node-v10.15.3-linux-x64.tar.xz
tar -xvf node-v10.15.3-linux-x64.tar.xz

创建软连接

ln -s /home/soft/node-v10.15.3-linux-x64/bin/node /usr/bin/node
ln -s /home/soft/node-v10.15.3-linux-x64/bin/npm /usr/bin/npm

node -v查看版本

2. install grunt
npm install -g grunt-cli

grunt -version查看版本grunt-cli v1.3.2

3. install elasticsearch-head
cd /home/soft/elasticsearch-head
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip 
cd elasticsearch-head-master
npm install -g cnpm --registry=https://registry.npm.taobao.org

修改配置文件Gruntfile.js,使head可以访问elasticsearch

vim Gruntfile.js
connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}

启动

grunt server

报错

>> Local Npm module "grunt-contrib-clean" not found. Is it installed?
>> Local Npm module "grunt-contrib-watch" not found. Is it installed?
>> Local Npm module "grunt-contrib-connect" not found. Is it installed?
>> Local Npm module "grunt-contrib-jasmine" not found. Is it installed?
Warning: Task "connect:server" not found. Use --force to continue.

Aborted due to warnings.

升级node

cd ~
npm install -g n
n 10.15.3 stable
npm install grunt-contrib-clean
npm install grunt-contrib-watch
npm install grunt-contrib-connect
npm install grunt-contrib-jasmine

启动OK

后台启动
nohup grunt server &

可以修改_site/app.js文件中的localhost:9200,改为主机ip:9200用于初始化head连接es

http://ip:9100/

logstash

tar -xvf logstash-6.4.0.tar.gz
cd logstash-6.4.0
cp logstash-sample.conf first-pipeline.conf

修改first-pipeline.cof

input {
  kafka {
    bootstrap_servers => ["192.168.0.131:9092,192.168.0.136:9092,192.168.0.137:9092"]
    topics => "filebeat"
    group_id => "es"
    codec => json
  }
}
filter {
  grok {
  match => {
    "message" => "^\[(?%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}?)\]\|(?[-%{WORD}]+?)\|(?[\w-]+?)\|%{LOGLEVEL:loglevel}"
  }
  }
  date {
    match => ["createtime", "yyyy-MM-dd HH:mm:ss"]
    target => "@timestamp"
  }
  mutate{
    remove_field => ["beat.name"]
  }
}
output {
  elasticsearch {
    hosts => ["http://192.168.0.94:9200"]
    document_type => "APP-LOG"
    #host => "%{[@host][beat]}"
    #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

codec => json 由于beat传输数据给kafka集群的时候,会附加很多tag,默认情况下,logstash就会将这串tag也认为是message的一部分。这样不利于后期的数据处理。所有需要添加codec处理。得到原本的message数据。

启动脚本start.sh

#!/bin/bash
nohup ./bin/logstash -f config/first-pipeline.conf --config.reload.automatic &

–path.data=/home/softs/elk/logstash-6.4.0是指存放数据的路径,不加的话不知道是否默认这里

filebeat

tar -xvf filebeat-6.4.0-linux-x86_64.tar.gz
cd filebeat-6.4.0-linux-x86_64
cp filebeat.yml filebeat-kafka.yml

修改filebeat-kafka.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/logs/app-*-info.log
  # 向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。
  # 默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level
  # 这个得意思就是会在es中多添加一个字段,格式为 "filelds":{"level":"debug"}
  fields:
    host: 192.168.0.94
    # 每个filebeat对应的机器的ip,区分日志机器来源
  
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
  # 上面配置的意思是:不以[开头的行都合并到上一行的末尾
  #pattern:正则表达式
  #negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
  #match:after 或 before,合并到上一行的末尾或开头
#-------------------------- Kafka output ------------------------------
output.kafka:
  hosts: ["192.168.0.131:9092","192.168.0.136:9092","192.168.0.137:9092"]
  topic: filebeat
  required_acks: 1
# 其他output都注释掉

启动脚本start.sh

#!/bin/bash
nohup ./filebeat -e -c filebeat-kafka.yml -d "publish" > /dev/null 2>&1 &

你可能感兴趣的:(java,elk)