最近再搭建项目日志收集,使用ELK+KAFKA完成日志收集。本编主要是讲如何搭建ELK。
下载安装ELK
1、下载ELK安装包,再导入到Linux系统中
https://www.elastic.co/cn/downloads/elasticsearch
选择下载,再选择下载的版本,例如Elasticsearch,我选择7.10.0版本,系统选择Linux_x86_64这版本,Kinbana和Logstash同理选择同一版本。
下载完毕后,上传到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
各解压完成后的文件夹如如。
启动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连接
启动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/ 成功后
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建立不用的索引。