不断进步,直到羔羊变成雄狮!
ELK Stack 简介
ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。
- Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
- Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
- Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
- Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。
Elasticsearch安装:
部署环境
我当前系统为红帽7.4
1 | [root@localhost ~]# cat /etc/redhat-release |
因为Elasticsearch需要Java8以上的版本,所以需要检查Java环境,redhat7的java环境是ok的,不需要进行额外配置
1 | [root@localhost ~]# java -version |
开始安装
下载Elasticsearch,我这里用得是6.6.2版本
1 | [root@localhost local]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz |
创建目录,用来保存系统文件和日志
1 | [root@localhost ~]# mkdir -p /usr/local/elk/data |
修改配置文件
我们需要去修改其配置文件/usr/local/elasticsearch-6.6.2/config下的elasticsearch.yml文件
1 | [root@localhost config]# vim elasticsearch.yml |
然后去修改jvm.options配置文件
1 | [root@localhost config]# vim jvm.options |
因为elasticsearch不能使用root用户去打开,所以需要创建个elk用户,使用该用户去登陆
1 | [root@localhost local]# useradd elk |
另外需要去修改系统配置文件
1 | [root@localhost local]# vim /etc/security/limits.conf |
1 | [root@localhost local]# vim /etc/sysctl.conf |
使其生效
1 | [root@localhost local]# sysctl -p |
新开个连接,然后检测是否设置成功
1 | [root@localhost ~]# ulimit -Hn |
启动服务
接下来切换到elk用户去启动elasticsearch
1 | [root@localhost ~]# su - elk |
通过访问本地的9200端口检查是否安装成功
但因为我们开启的elasticsearch是在终端中开启的,一旦终端关闭,那么该服务将关闭,所以我们需要让该程序在后台执行
1 | nohup /usr/local/elasticsearch-6.6.2/bin/elasticsearch >> /usr/local/elasticsearch-6.6.2/output.log 2>&1 & |
后台运行
我们可以将其做出shell脚本让其在后台去执行
1 | [elk@localhost elasticsearch-6.6.2]$ touch startup.sh |
关闭服务
1 | #找到其进程号 |
进行一个简单的查询:
查看集群状态
1 | [root@localhost ~]# curl http://192.168.89.137:9200/_cat/health?v |
查看节点列表:
1 | [root@localhost ~]# curl http://192.168.89.137:9200/_cat/nodes?v |
查看索引列表
1 | [root@localhost ~]# curl http://192.168.89.137:9200/_cat/indices?v |
Kibana安装
下载解压
1 | [root@localhost local]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-linux-x86_64.tar.gz |
注:kibana可以和elasticsearch不在同一台机器上,可以用来做成集群
修改配置文件
修改该目录中config文件中的kibana.yml配置文件
1 | [root@localhost config]# vim kibana.yml |
后台启动服务
1 | [root@localhost kibana-6.6.2-linux-x86_64]# vim startup.sh |
访问服务
通过浏览器访问本地的5601端口去使用kibana服务
关闭服务
1 | [root@localhost kibana-6.6.2-linux-x86_64]# ps -ef | grep kibana |
Logstash安装
下载解压缩
1 | [root@localhost local]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.2.tar.gz |
修改配置文件
1 | [root@localhost config]# vim jvm.options |
进入bin目录下运行程序,将日志信息输出到屏幕上
1 | [root@localhost bin]# ./logstash -e 'input {stdin{}} output{stdout{}}' |
比如输入个hello,world然后回车,那么就会把结果输出到屏幕上
使用配置文件启动
编辑主配置文件
1 | [root@localhost logstash-6.6.2]# cd config/ |
使用主配置文件去启动程序
1 | [root@localhost bin]# ./logstash -f ../config/logstash.conf |
使用脚本启动
1 | [root@localhost logstash-6.6.2]# touch startup.sh |
logstash插件
logstash是通过插件对其功能进行加强
插件分类:
- inputs 输入
- codecs 解码
- filters 过滤
- outputs 输出
在Gemfile文件里记录了logstash的插件
1 | [root@localhost logstash-6.6.2]# cat Gemfile |
如果需要其他插件的话,那么需要去其github上的库下载插件,地址为:https://github.com/logstash-plugins
使用filter插件logstash-filter-mutate
1 | [root@localhost config]# vim logstash2.conf |
当输入sss|sssni|akok223|23即会按照|分隔符进行分隔
其数据处理流程:input–>解码–>filter–>解码–>output
ELK联动
我们需要使用logstash-output-elasticsearch插件将logstash日志信息收集到elasticsearch当中
检查插件
因为在logstash当中就存在elasticsearch的插件,那么就可以直接使用的
1 | [root@localhost logstash-6.6.2]# cat Gemfile |grep elasticsearch |
修改配置文件
那么我们去写个配置文件,通过配置文件去将elasticsearch和logstash结合起来
1 | [root@localhost config]# vim logstash3.conf |
同步系统时间
因为系统时间不准确,所以更新一下系统时间,与阿里的ntp服务器进行同步
ntp1.aliyun.com ~ ntp5.aliyun.com这几个ntp服务器都可以使用的
1 | [root@localhost config]# ntpdate ntp1.aliyun.com #进行同步 |
启动服务
然后去启动logstash服务
1 | [root@localhost config]# ../bin/logstash -f logstash3.conf |
ELK联动
去访问本地的5601端口,打开kibana
可以在kibana上看到增加了一个索引
然后去创建模式,设置索引模式为msg-*,即是以msg-开头的索引都进行匹配
设置按系统时间来进行过滤
然后在Discover面板选择msg-*模块就可以看到当前的数据