目录
1、Elasticsearch + Logstash + Kibana
2、Elasticsearch + Logstash + Filebeat + Kibana
3、Elasticsearch + Logstash + Filebeat + Kibana + Redis
4、Elasticsearch + Fluentd + Filebeat + Kibana
一、ELK/EFK简介
1.1 什么是ELK/EFK?
1.2 常见架构
1、Elasticsearch + Logstash + Kibana
这是一种简单架构。这种架构,通过logstash 收集日志, elasticsearch 分析日志,然后再 kibana 中展示,生产中很少使用。
2、Elasticsearch + Logstash + Filebeat + Kibana
与上一个架构相比,增加了filebeat 模块,它是一个轻量级的日志收集处理工具 (Agent) ,部署在客户端,Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash ,生产中使用较多,但缺点是logstash 出现故障,会造成日志丢失。
3、Elasticsearch + Logstash + Filebeat + Kibana + Redis
这种架构,通过增加中间件来避免日志丢失。
4、Elasticsearch + Fluentd + Filebeat + Kibana
这种使用了fluentd 代替了 logstash 。当然,我们也可以使用 Fluentd 的插件( fluent-plugin
elasticsearch )直接将日志发送给 Elasticsearch ,可以根据自己的需要替换掉 Filebeat ,从而形成
Fluentd => ElasticSearch => Kibana 的架构,也称作 EFK 。
1.3 基本流程
下面以第三种架构为例,基本流程如下:
二、ELK部署
2.1 环境准备
主机名 | IP地址 | 角色 |
elk-node01 | 192.168.186.161 | es01,redis01 |
elk-node02 | 192.168.186.162 | es02,redis02(vip:192.168.186.100) |
elk-node03 | 192.168.186.163 | es03,kibana,nginx |
1、设置主机名和hosts解析
[root@elk-node01 ~]# cat >> /etc/hosts << EOF
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
EOF
cat >> /etc/hosts << EOF
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
EOF
[root@elk-node01 ~]# tail -3 /etc/hosts
192.168.186.161 elk-node01
192.168.186.162 elk-node02
192.168.186.163 elk-node03
2、时间同步
3、部署jdk
三台机器都部署jdk,建议内存3G以上
[root@elk-node01 ~]# rpm -ivh jdk-8u261-linux-x64.rpm
[root@elk-node01 ~]# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
2.2 部署ElasticSearch集群环境
2.2.1 安装Elasticsearch
三台机器都部署
使用清华镜像源,本文安装7.2.0
# vim /etc/yum.repos.d/elk.repo
[elk]
name=elk 7.x
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/
gpgcheck=0
安装:# yum install -y elasticsearch-7.2.0
2.2.2 配置Elasticsearch集群
elk-node01节点的配置
root@elk-node01 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-node01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.186.161
http.port: 9200
discovery.seed_hosts: ["elk-node01", "elk-node02","elk-node03"]
cluster.initial_master_nodes: ["elk-node01"]
node.master: true
node.data: false
node.ingest: false
node.ml: false
cluster.remote.connect: false
安装**head插件**,在5.0版本之后不支持直接把插件包放入es安装目录的plugin目录下,需要单独安装。
1>安装环境支持,需要安装nodejs
[root@elk-node01 ~]# yum install -y nodejs npm
2>下载head插件
[root@elk-node01 elasticsearch]# cd /var/lib/elasticsearch/
[root@elk-node01 elasticsearch]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
3>安装依赖包
[root@elk-node01 elasticsearch]# yum install openssl bzip2 unzip -y
下载运行head必要的文件(放置在文件夹/tmp下)
[root@elk-node01 elasticsearch]# cd /tmp
[root@elk-node01 tmp]# wget https://npm.taobao.org/mirrors/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
用以下命令把下载到的包添加到npm cache目录中
\# npm cache add phantomjs
执行npm install,它便会使用本地缓存的xxx.tgz,而跳过下载过程。
npm安装卡时可以打开info level的log,命令如下
#npm config set loglevel info
解压master.zip
\# unzip master.zip
开始安装依赖:
[root@elk-node01 elasticsearch]# cd elasticsearch-head-master/
\# npm install
\# 直接使用npm安装时间久,依赖网络,替换为淘宝的cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
\# 安装依赖
cnpm install
4> 修改配置文件
修改 Gruntfile.js
在该文件中添加如下,务必注意不要漏了添加“,”号,这边的hostname:’*’,表示允许所有IP可以访问
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*'
}
修改elasticsearch-head默认连接地址,将localhost改为本机IP
5>修改elasticSearch配置文件并启动ElasticSearch
修改 elasticsearch 的配置文件 elasticsearch.yml ,以允许跨域访问,在文末追加如下代码即可
重启:
访问IP:9100就能看到我们集群信息
安装Bigdesk插件
1>下载
2>启动web服务器,默认监听端口号8000,指定启动端口,并后台启动
安装cerebro插件
1>下载cerebro插件:
2>上传到安装目录、解压:
3>启动cerebro
4 、浏览器访问 IP:9000
就能看到数据分片信息。
配置插件开机自启动:
注意:不添加执行权限,脚本等无法执行
安装: # yum install -y elasticsearch-7.2.0
elk-node02 和 elk-node03 节点的配置
[root@elk-node02 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
node.name: elk-node02
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.186.162
node.master: false
node.data: true
node.ingest: false
node.ml: false
cluster.remote.connect: false
[root@elk-node03 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
node.name: elk-node03
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.186.163
node.master: false
node.data: true
node.ingest: false
node.ml: false
cluster.remote.connect: false
插件安装和 elk-node01 相同。
启动 elasticsearch 服务:
2.2.3 检查Elasticsearch集群
插件安装和 elk-node01 相同。
启动 elasticsearch 服务:
systemctl restart elasticsearch
systemctl enable elasticsearch
1> 查看集群状态(任意节点执行)
2>查看各个节点的信息
3>查看单个节点信息
4> 插件查看
head 插件
Bigdesk插件
cerebro插件
2.3 部署Redis+Keepalived高可用环境
1 、安装 redis 服务及主从配置
2 、 Keepalived 安装
两个节点都安装
3 、 redis+keepalived 配置
1>主节点配置
2>从节点配置
以上的 keepalived.conf 文件中的切换模式设置为 nopreempt ,意思是:
不抢占 VIP 资源,此种模式要是所有的节点都必须设置为 state BACKUP 模式!
需要注意无论主备服务器都需要设置为 BACKUP ,与以往 KeepAlived 的配置不同,其目的就是防止主服务器恢复后重新抢回VIP ,导致 Redis 切换从而影响稳定。
主节点脚本复制到从节点,保证有执行权限。
Keepalived 在转换状态时会依照状态来呼叫:
当进入 Master 状态时会呼叫 notify_master
当进入 Backup 状态时会呼叫 notify_backup
当发现异常情况时进入 Fault 状态呼叫 notify_fault
当 Keepalived 程序终止时则呼叫 notify_stop
3>主从节点启动服务
4 、 redis+keepalived 测试
1> 通过 VIP 连接 Redis:
2>插入数据测试:
3> 模拟故障测试 :
停止主节点 redis
2.4 部署Kibana及nginx代理访问环境
Kibana 及 nginx 代理访问环境部署(访问权限控制)。在 elk-node03 节点机上操作
1 、 kibana 安装配置
由于维护的业务系统比较多,每个系统下的业务日志在 kibana 界面展示的访问权限只给该系统相关人员开放,对系统外人员不开放。所以需要做kibana 权限控制。
这里通过nginx 的访问验证配置来实现。
可以配置多个端口的 kibana ,每个系统单独开一个 kibana 端口号,比如财务系统 kibana 使用 5601 端
口、租赁系统 kibana 使用 5602 ,然后 nginx 做代理访问配置。
每个系统的业务日志单独在其对应的端口的kibana界面里展示。
提供服务脚本:
启动服务:
查看:
配置nginx的反向代理以及访问验证
配置虚拟主机:
配置虚拟主机:
设置验证文件
启动nginx:
2、查看
三、ELK日志收集
3.1 客户机日志收集操作(Logstash)
3.1.1 logstash 介绍
LogStash由 JRuby 语言编写,基于消息( message-based )的简单架构,并运行在 Java 虚拟机
( JVM )上。不同于分离的代理端( agent )或主机端( server ), LogStash 可配置单一的代理端
( agent )与其它开源软件结合,以实现不同的功能。
logStash 的四大组件
正是由于以上组件在 LogStash 架构中可独立部署,才提供了更好的集群扩展性。
LogStash 主机分类
3.1.2 安装logstash
LogStash 初体验
在 logstash 的家目录创建三个文件夹。分别用来存放日志, conf 配置文件和 logstash 服务主配置
启动测试:
将屏幕输入的字符串输出到elasticsearch服务中
输入:hello stash,然后在elasticsearch中查看logstash新加的索引
LogStash启动慢解决:
检查了一下系统的熵数池
如果返回值小于 1000,大于就不用了 , 那么就需要安装 haveged 包。
3.1.3 logStash配置语法
Logstash 社区通常习惯用 shipper , broker 和 indexer 来描述数据流中不同进程各自的角色。 如下
图:
语法:
Logstash 设计了自己的 DSL ,包括有区域, 注释, 数据类型 ( 布尔值, 字符串, 数值, 数组, 哈希) , 条件判断, 字段引用等。
区段 (section)
数据类型
字段引用 (field reference)
在 Logstash 配置中使用字段的值, 只需要把字段的名字写在中括号 [] 里就行了, 这就叫字段引用。
条件判断 (condition)
Logstash 从 1.3.0 版开始支持条件判断和表达式。
命令行参数
设置文件
3.1.4 logstash插件
学习编写 conf 格式
输入插件配置,此处以读取文件 file 为例,可以设置多个
记住一个原则: Logstash 配置一定要有一个 input 和一个 output 。
如果没有写明 input ,默认就会使用 input/stdin ,同理,没有写明的 output 就是 output/stdout 。
学习编写 input 的 file 插件
input 插件之 file
sincedb_path :记录 logstash 读取位置的路径
start_postion : 包括 beginning 和 end ,指定收集的位置,默认是 end ,从尾部开始
add_field 加一个域
discover_internal 发现间隔,每隔多久收集一次,默认 15 秒
3.2 客户机日志收集操作(Filebeat)
3.2.1 安装 Filebeat
3.2.2 配置 Filebeat
配置文件: filebeat.yml
filebeat 默认的配置文件为 filebeat.yml,filebeat 还提供了一个比较完整的配置文件
filebeat.reference.yml
场景1:输入为file,输出为console
测试:
场景2:输出为file
测试:
场景3:输出为logstash
filebeat 配置
logstash配置
测试:三个终端
logstash 输出:
场景4:输出为elasticsearch
测试:
默认索引是:filebeat-
自定义索引: