最近再搭建项目日志收集,使用ELK+KAFKA完成日志收集。本编主要是讲如何搭建ELK。

下载安装ELK

1、下载ELK安装包,再导入到Linux系统中
https://www.elastic.co/cn/downloads/elasticsearchELK部署完成后的配置 elk安装部署_json
选择下载,再选择下载的版本,例如Elasticsearch,我选择7.10.0版本,系统选择Linux_x86_64这版本,Kinbana和Logstash同理选择同一版本。
ELK部署完成后的配置 elk安装部署_json_02
下载完毕后,上传到Linux系统,放在某个目录下,如:/home/elk
2、解压:
tar -zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz
mv elasticsearch-7.10.0 /home/elk/elasticsearch

tar -zxvf logstash-7.10.0-linux-x86_64.tar.gz
mv logstash-7.10.0 /home/elk/logstash

tar -zxvf kibana-7.10.0-linux-x86_64.tar.gz

mv kibana-7.10.0 /home/elk/kibana

ELK部署完成后的配置 elk安装部署_ELK部署完成后的配置_03


各解压完成后的文件夹如如。

启动ES

1、创建用户和用户组
groupadd elasticsearch
useradd elasticsearch -g elasticsearch

2、给 elasticsearch 用户分配权限
chown -R elasticsearch:elasticsearch /home/elk/elasticsearch

3、创建数据和日志文件夹
数据文件夹:var/log/elasticsearch/data/
日志文件夹:var/log/elasticsearch/log/
分配可访问权限:
chown -R elasticsearch:elasticsearch var/log/elasticsearch/data/
chown -R elasticsearch:elasticsearch var/log/elasticsearch/log/

4、修改elasticsearch配置文件
vim home/elk/elasticsearch/config/elasticsearch.yml
修改或添加以下配置:
数据文件夹:
path.data: /var/log/elasticsearch/data
日志文件夹:
path.logs: /var/log/elasticsearch/log
网络ip:
network.host: 安装elk的ip地址
(建议不要127.0.0.1或localhost或0.0.0.0,我使用上面三个时,加入ES-Head不在同一台机器,发现连接不上ES,原因未知)
端口:
http.port: 9200
tcp端口:
transport.tcp.port: 9300
设置为master节点:
node.master: true
master节点名称:
node.name: master
集群中的节点,就是master节点
cluster.initial_master_nodes: [“master”]
(为何要设置master节点,如果不设置,kinaba连接的时候,一直会提示找不到master节点,情况糟糕的会直接报错,起不来,或者连接不是ES,坑还是很多的ε=(´ο`*)))唉)
设置可跨域:
http.cors.enabled: true
http.cors.allow-origin: “*”
退出保存文件
5、启动ES
cd /home/elk/elasticsearch/bin
后台启动:./elasticsearch -d
6、查询是否启动成功,浏览器输入:http://ES安装的ip:9200/

{
  "name" : "master",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "FUFO2_KiSYaReuZphERXHQ",
  "version" : {
    "number" : "7.10.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
    "build_date" : "2020-11-09T21:30:33.964949Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

或者使用ES-head连接

ELK部署完成后的配置 elk安装部署_json_04

启动Kibana

1、修改kibana配置文件

vim home/elk/kibana/config/kibana.yml

修改或添加以下配置:

kibana的服务端口

server.port: 5601

kibana的服务ip

server.host: “0.0.0.0”

连接ES的地址:

elasticsearch.hosts: [“http://es的ip:9200”]

(建议还是用es安装的ip,不推荐用127.0.0.1或localhost或0.0.0.0,可能会连不上ES,同时也不推荐用:elasticsearch.url: [“http://es的ip:9200”]这样的配置,不一定能连上ES,原因没深入连接)

可以设置kibana的中文版:

默认:i18n.locale: “en”

中文:i18n.locale: “zh-CN”

2、启动

cd /home/elk/kibana/bin

后台启动:./kibana -d

或者后台启动:

nohup ./kibana >/dev/null &

3、查看是否启动成功:

http://kibana的ip:5601/ 成功后

ELK部署完成后的配置 elk安装部署_json_05

Logstash启动

1、新增logstash.conf配置文件
cd /home/elk/logstash/config
cp logstash-sample.conf logstash.conf 或 touch logstash.conf
vim logstash.conf
2、修改logstash.conf,添加以下配置

input {
#  stdin{}
   tcp {
    # host:port就是上面appender中的 destination,
    # 这里其实把logstash作为服务,开启9250端口接收logback发出的消息
    host => "logstash的ip" 
    port => 9250 
    mode => "server" 
    tags => ["tags"] 
    codec => json_lines
  }
}

filter {
#  mutate{
#    add_field => {
#      "@msg" => "%{msg}"
#    }
#  }
  json{
    source => "msg"
    skip_on_invalid_json => true
#    remove_field => ["msg"]
  }
}

output {
     elasticsearch {
        hosts => ["ES的ip:9200"]
       index => "zipkin-topic-%{+YYY.MM.dd}" #按日新建ES索引
     }
  }
  stdout { codec => rubydebug }
}

3、启动logstack
cd /home/elk/logstash/bin
后台启动:
nohup ./logstash -f /home/elk/logstash/config/logstash.conf >/dev/null &
到此ELK安装并启动完成:
因为我项目用途是使用ELK和KAFKa收集项目项目日志:
附上logstash连接kafka的配置文件内容如下:

input {
  kafka {
    bootstrap_servers => "10.47.3.238:9092"
    topics => ["zipkin"]
    codec => "json"
    auto_offset_reset => "earliest" #从最早的偏移量开始消费
    decorate_events => true    #此属性会将当前topic、offset、group、partition等信息也带到message中
    type => "zipkin" #所有插件通用属性,尤其在input里面配置多个数据源时很有用
  }
  kafka {
    bootstrap_servers => "10.47.3.238:9092"
    topics => ["my_log"]
    codec => "json"
    auto_offset_reset => "earliest" #从最早的偏移量开始消费
    decorate_events => true    #此属性会将当前topic、offset、group、partition等信息也带到message中
    type => "my_log" #所有插件通用属性,尤其在input里面配置多个数据源时很有用
  }

}
 
output {

   if [type] == "zipkin" {
        elasticsearch {
            hosts => ["10.47.3.243:9200"]
            index => "zipkin-topic-%{+YYY.MM.dd}"
        }
    }
   if [type] == "my_log" {
        elasticsearch {
            hosts => ["10.47.3.243:9200"]
            index => "kafka-log-%{+YYY.MM.dd}"
        }
    }
    stdout {
        codec => rubydebug {metadata => true}  #logstash控制台输出日志和@metadata信息
    }
}

不同的topic建立不用的索引。