ELK的搭建以及部署(Linux的版本)
一、什么是ELK
ELK是Elasticsearch + Logstash + Kibana 这种架构的简写.
二、ELK常见的架构
Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。
Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如rabbitmq(集群化)) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
下面如何搭建:
(1)Elasticsearch 安装与部署
下载地址(ELK要求版本一致)
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
下载完了之后进行上传LInux这边使用xshell的rz上传
使用命令
tar -zxvf ******.tar.gz
进行解压解压完了之后进行修改配置
cd /usr/demo/elasticsearch-7.8.0/config
编辑目录下的elasticsearch.yml文件
vim elasticsearch.yml
cluster.name: myes #主要修改这个跟host 这个是我们的es的标识相当于组名
node.name: “node-1”
network.host: 10.1.40.241 #地址一般写本地的 127.0.0.1
http.cors.allow-origin: “*”
discovery.type: single-node
因为es不能在root下启动所以要更换用户
# 为elaticsearch创建用户
groupadd limao
useradd limao -g limao -p elasticsearch
# 分配权限
chown -R limao:limao elasticsearch-7.10.2
# 切换用户到limao
su limao
启动
# 后台启动
./elasticsearch &
# 验证启动是否成功
http://127.0.0.1::9200
{
"name" : "my-name",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "Px7djFasdfasdfa4eGTSbQ",
"version" : {
"number" : "7.10.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "747e1cc71def077253878a123123123123",
"build_date" : "2021-01-13T00:42:12.435326Z",
"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"
}
(2)logstash配置/启动
下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-linux-x86_64.tar.gz
Logstash 支持各种输入选择,例如:beats、file、http、jdbc、redis、kafka… …,其中在文件采集时,官方建议使用beats(因为logstash是基于java开发的,需要在jvm跑。当进行采集时会对内存、cpu、io等资源消耗比较高,而beats是基于go语言开发,性能接近c语言,是专为并发而生的).
同上解压然后进行操作这个配置文件的input为filebeat可以根据情况进行修改
cd logstash-7.10.2/config
# 自定义配置文件
vim logstash-yjg.conf
input {
beats {
port => 7880
}
}
#filter-start
filter {
mutate{
remove_field => ["cloud","agent","ecs","input","host"]
gsub => ["message","^\[",""]
split => {"message"=>"-|"}
add_field => {
"user" => "%{[message][0]}"
}
add_field => {
"product" => "%{[message][1]}"
}
add_field => {
"application" => "%{[message][2]}"
}
add_field => {
"host_port" => "%{[message][3]}"
}
add_field => {
"traceNo" => "%{[message][4]}"
}
add_field => {
"time" => "%{[message][5]}"
}
add_field => {
"level" => "%{[message][6]}"
}
add_field => {
"thread" => "%{[message][7]}"
}
add_field => {
"caller_class_name" => "%{[message][8]}"
}
add_field => {
"caller_line_number" => "%{[message][9]}"
}
add_field => {
"tid" => "%{[message][10]}"
}
add_field => {
"spanId" => "%{[message][11]}"
}
add_field => {
"apiCode" => "%{[message][12]}"
}
add_field => {
"api_code" => "%{[message][13]}"
}
add_field => {
"kit_code" => "%{[message][14]}"
}
add_field => {
"msg" => "%{[message][15]}"
}
copy => {"[log][offset]" => "offset" }
copy => {"[log][file][path]" => "path" }
remove_field => ["message","tags","@version","log","beat"]
}
date{ match => ["time","yyyy-MM-dd HH:mm:ss.SSS"] target => "time"}
}
output {
elasticsearch {
hosts => ["http://10.1.40.241:9200"]
index => "limaodongdemo"
# user => "elastic"
# password => "1qazxsw@"
}
stdout {
codec => rubydebug { }
}
}
启动
# 后台启动logstash,并加载指定配置文件
nohup ./bin/logstash -f config/logstash-yjg.conf > log.txt 2>&1 &
2.filebeat的安装整合
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz
vim filebeatdemo1.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
# 默认是关闭的,需要手动打开
enabled: true
paths:
# 数组形式,支持多个日志采集
- /tmp/logs/*.log
- /data/logs/*.log
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# 输出到logstash端口
hosts: ["10.1.40.241:7880"]
#启动filebeat命令
./filebeat -e -c filebeatdemo1.yml -d "publish"
(3)kibana配置/启动
cd kibana-7.10.2-linux-x86_64/config
vim kibana.yml
server.name: "my-kibana"
server.port: 5601 #kibana端口
server.host: "0.0.0.0" #所有主机都能访问,或者也可以指定一个ip
elasticsearch.hosts: "http://10.1.40.241:9200" #配置es的访问地址
kibana.index: ".kibana"
# 设置中文(注意,如果是kibana-6*版本的话,需要下载python的服务,手动翻译,替换原文件,比较麻烦,故使用7版本)
i18n.locale: "zh-CN"
因为kibana也不支持root用户启动所以要换用户
useradd es
#修改/etc/sudoers文件,进入超级用户,因为没有写权限,所以要先把写权限加上
chmod u+w /etc/sudoers
#编辑/etc/sudoers文件,找到这一 行
vim /etc/sudoers
root ALL=(ALL:ALL) ALL
#添加这一行 es为新添加的用户名
es ALL=(ALL) ALL
#为了安全撤销文件的写权限
chmod u-w /etc/sudoers
#给es普通用户授理访问这个文件权限
sudo chown -R es:es /usr/local/softwore/kibana
#切换到es用户
su es
# 启动kibana
./kibana