ELK部署(简单部署流程)
简介
ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。
ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
Logstash是一个具有实时传输能力的数据收集引擎,用来进行数据收集(如:读取文本文件)、解析,并将数据发送给ES。
Kibana为 Elasticsearch 提供了分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度表格、图形。
ELK常见的几种架构
1 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。
2 Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如kafka) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
架构图:
安装部署
我这里介绍的是第二种架构模式
安装包下载地址:https://www.elastic.co/cn/downloads/
fileBeat安装(需要收集项目日志的服务器上都要安装)
1.下载fileBeat安装包
提供两种方式:
(1)官方下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
(2)在线下载:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.1-x86_64.rpm
sudo rpm -vi filebeat-7.2.1-x86_64.rpm
备注:这里下载的是7.2.1版本,使用者也可以自己看情况安装其他版本,版本号参见官网
亲身经历:
这里我推荐使用rpm安装,因为filebeat源码安装配置systemctl启动的service配置很复杂;
1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.1-x86_64.rpm
2. sudo rpm -vi filebeat-7.2.1-x86_64.rpm
## 启动
3. systemctl start filebeat
## 设置开机启动, 可参照官网设置 https://www.elastic.co/guide/en/beats/filebeat/current/running-with-systemd.html
4. systemctl enable filebeat.service
## 默认查看日志方式
5. journalctl -u filebeat.service
#####-------------修改默认日志地址----begin------------
## 1、创建目录
mkdir /etc/systemd/system/filebeat.service.d
## 2、创建文件
vi /etc/systemd/system/filebeat.service.d/debug.conf
## 3、在文件中添加
Environment="BEAT_LOG_OPTS=-path.logs /var/log/filebeat"
## 4、保存退出
## 刷新服务
systemctl daemon-reload
## 重启服务
service filebeat restart
#####-------------修改默认日志地址---end-------------
2.配置说明
修改/etc/filebeat/filebeat.yml
可以删掉原来的,新建filebeat.yml,贴上下面的内容,然后修改下面的修改点
`## 修改 #-- 修改备注了要修改的地方,其他地方按文档中的配置
#=========================== Filebeat inputs =============================
#####filebeat 配置如下内容###
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/web/authentication/logs/*.log #--修改点--#-- 修改日志地址--
tags: ["JS"]
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}\s'
multiline.negate: true
multiline.match: after
fields:
appName: center #--修改点--#-- 项目名称
- type: log #--修改点--#-- 如果只有一个,可以把这整块去掉
enabled: true
paths:
- /opt/web/sys/*.log #--修改点--#-- 修改日志地址
tags: ["JS"]
tail_files: true
multiline.pattern: '^\d{4}-\d{2}-\d{2}\s'
multiline.negate: true
multiline.match: after
fields:
appName: resource #--修改点--#--项目名称
#============================= Filebeat modules ===============================
#==================== Elasticsearch template setting ==========================
#================================ General =====================================
#============================== Dashboards =====================================
#============================== Kibana =====================================
#============================= Elastic Cloud ==================================
#================================ Outputs =====================================
# 注释输出到es中的配置
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch: #把这行注释掉
# hosts: ["192.168.100.23:9200"] #把这行注释掉
#----------------------------- Logstash output --------------------------------
output.logstash: #这行注释打开
hosts: ["localhost:5044"] ## 内网 #--修改点--#-- ## logstash的ip地址和端口号
#================================ Processors =====================================
processors:
- add_host_metadata:
netinfo.enabled: true
- drop_fields:
fields: ["agent","ecs","host.id","@version","host.hostname","host.os.codename","host.os.family","host.os.platform"]
- add_cloud_metadata: ~
#================================ Logging =====================================
#============================== Xpack Monitoring ===============================
#================================= Migration ==================================
启动命令
## 启动
systemctl start filebeat
## 设置开机启动
systemctl enable filebeat.service
## 查看日志
journalctl -u filebeat.service
Logstash 安装
下载logstash安装包
提供两种方式:
(1)官方下载地址:https://www.elastic.co/cn/downloads/logstash
(2)在线下载:wget https://artifacts.elastic.co/downloads/logstash/logstash-7.7.0.tar.gz
sudo tar tar -zxvf logstash-7.7.0.tar.gz
备注:这里下载的是7.7.0版本,使用者也可以自己看情况安装其他版本,版本号参见官网
配置说明
在安装目录的config文件夹下创建logstash.conf 文件,内容如下:
input {
beats {
port => 5044
}
}
filter {
grok {
#match => { "message" => '(?<logtime>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}) \[.*?\]\s(?<level>(INFO|DEBUG|ERROR|WARN))\s.*?\)\s-\s.*' }
# 收集的日志格式 如 2020-01-16 23:58:25,409 ERROR c.a.n.c.config.impl.ClientWorker(Slf4jLogger.java:157)
match => { "message" => '(?<logtime>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}) .*?(?<level>(INFO|DEBUG|ERROR|WARN))' }
}
date {
match => ["logtime","yyyy-MM-dd HH:mm:ss,SSS"]
}
}
output {
# 在收集的时候指定一个tag ,同时指定一个appName
if "JS" in [tags] {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[fields][appName]}-%{+YYYY.MM.dd}"
}
}
}
启动命令
// 需要进去目录下的bin文件夹下,使用相对路径启动
nohup ./logstash -f ../config/logstash.conf &
查看配置是否启动
进入安装目录下的logs文件夹下,使用 tail -f logstash-plain.log
如若成功显示以下界面:
Elasticsearch 安装
下载elasticsearch安装包
提供两种方式:
(1)官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch
(2)在线下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
sudo tar tar -zxvf logstash-6.2.4.tar.gz
备注:这里下载的是6.2.4版本,使用者也可以自己看情况安装其他版本,版本号参见官网
配置说明
vi /usr/local/elasticsearch-6.2.4/config/elasticsearch.yml
#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es
#节点名称
node.name: node-1
#设置索引数据的存储路径
path.data: /usr/local/elasticsearch/data
#设置日志的存储路径
path.logs: /usr/local/elasticsearch/logs
#设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中
network.host: 0.0.0.0
#设置对外服务的http端口
http.port: 9200
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["127.0.0.1","10.10.10.34:9200"]
再执行启动命令
sh /usr/local/elasticsearch-6.2.4/bin/elasticsearch
常见的启动错误
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
修改/etc/security/limits.conf文件 在文件末尾添加如下
[es@localhost root]$ su root
[root@localhost~]# vi /etc/security/limits.conf
-
hard nofile 65536
-
soft nofile 65536
[2]: max number of threads [3818] for user [es] is too low, increase to at least [4096]
[root@localhost ~]# vi /etc/security/limits.d/20-nproc.conf
-
soft nproc 4096
-
hard nproc 4096 root soft nproc unlimited
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
/etc/sysctl.conf文件末尾添加 vm.max_map_count = 2621441
[root@localhost ~]# vi /etc/sysctl.conf
[root@localhost~]# sudo sysctl -p /etc/sysctl.conf//立即生效
测试elstaicsearch 是否连通
[es@localhost root]$ sh/usr/local/elasticsearch-6.2.4/bin/elasticsearch -d //加-d就是启动后台进程
[es@localhost root]$ ps -ef|grep elasticsearch
curl http://localhost:9200
成功显示如下
Kibana
下载kibana安装包
提供两种方式:
(1)官方下载地址:https://www.elastic.co/cn/downloads/kibana
(2)在线下载:wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz
tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz
备注:这里下载的是6.3.2版本,使用者也可以自己看情况安装其他版本,版本号参见官网
配置说明
vim config/kibana.yml
# 放开注释,将默认配置改成如下:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"
启动
bin/kibana
效果
参考:
filebeat源码安装方式设置开机启动
一、在/etc/init.d目录下新建文件filebeat
注意修改 5 filebeat 安装地址
#!/bin/sh
# chkconfig: 2345 10 90
# description: filebeat
FB_HOME=/var/local/filebeat-7.2.1-linux-x86_64
case "$1" in
start)
# su elk<<!
cd $FB_HOME
./filebeat &
!
echo "filebeat startup"
;;
stop)
es_pid=`ps aux|grep filebeat | grep -v 'grep filebeat' | awk '{print $2}'`
kill -9 $es_pid
echo "filebeat stopped"
;;
restart)
es_pid=`ps aux|grep filebeat | grep -v 'grep filebeat' | awk '{print $2}'`
kill -9 $es_pid
echo "filebeat stopped"
# su elk<<!
cd $FB_HOME
./filebeat &
!
echo "filebeat startup"
;;
*)
echo "start|stop|restart"
;;
esac
exit $?
二、保存退出,赋予执行权限
chmod +x filebeat
三、添加到开机启动任务
chkconfig --add filebeat
四、如果不设置开机启动的话,也可以使用
> service filebeat start/stop/restart
来操作