在日常运维工作中,我们需要进行日志分析,通常根据特定条件直接grep、awk过滤自己想要的信息。但在大规模的日志场景中,这种方法效率低下,面临的问题是数据量大、时间跨度长、查询慢等问题。通常解决思路是建立集中式的日志管理分析系统,将所有节点日志进行收集、整理、归档管理。
目前ELK(E=Elasticsearch、L=Logstash、K=Kibana)提供了一整套的日志管理分析的解决方案,是当前流行的一种日志分析管理系统。
1.1 ELK架构介绍
对于日常运维工作而言,ELK提供一整套日志收集、分析、管理的解决方案。
1.1.1 核心组件
ELK由Elasticsearch、Logstash、Kibana组成,这三款组件都是开源,通常是配合使用。
Elasticsearch
Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。当然Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
Logstash
Logstash 的作用就是一个数据收集器,将各种格式各种渠道的数据通过它收集解析之后格式化输出到 Elasticsearch ,再由Kibana 提供的比较友好的 Web 界面进行汇总、分析、搜索。 Logstash 内部也是管道的方式进行数据的搜集、处理、输出。在 Logstash 中,包括了三个阶段:
输入 input --> 处理 filter(不是必须的) --> 输出 output。
Kibana
Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。
1.2 搭建ELK日志管理系统
1.2.1 服务器准备
这里我用的是滴滴云的弹性服务器,作为学习使用,4C8G配置即可,大家学习可自行搭建虚拟机或者采用云服务器。
1.2.2 云服务器开放安全组
因为是用于学习,所以不做网络限制,这里开放了所有端口和源IP访问。
1.2.3 安装java环境变量
yum install -y java-1.8.0-openjdk*
查看Java版本
java -version
1.2.4 ELK应用安装
ELK安装包一共有三个应用,我们先安装elasticsearch。
下载elasticsearch。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.0-linux-x86_64.tar.gz
解压elasticsearch。
tar -zxvf elasticsearch-7.16.0-linux-x86_64.tar.gz
1.2.5 elasticsearch配置并启动
打开elasticsearch配置文件
vi /usr/local/elasticsearch-7.16.0/config/elasticsearch.yml
加入以下配置
#允许入访IP
network.host: 0.0.0.0
#应用端口
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
启动elasticsearch
由于root用户不能直接启动elasticsearch,我们需要创建elk用户,属主后启动。
#创建elk用户组
groupadd elk
#创建elk用户
useradd elk -g elk
#属组
chown -R elk.elk elasticsearch-7.16.0
#启动elasticsearch
#进入elk用户
su elk
#进入bin目录
cd /usr/local/elasticsearch-7.16.0/bin
#执行启动脚本
./elasticsearch &
启动后发现程序报错,我们逐一处理
第一个报错是:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],根据提示,我们将vm.max_map_count调整到262144。
#编辑 /etc/sysctl.conf,追加以下内容:
vm.max_map_count=262144
#保存后,执行:
sysctl -p
第二个报错是:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seenitial_master_nodes] must be configured,根据报错提示,我们在elasticsearch
的config
目录下,修改elasticsearch.yml
配置文件,将下面的配置加入到该配置文件中:
cluster.initial_master_nodes: ["node-1"]
再次启动 elasticsearch后成功,可通过IP+端口访问elasticsearch。
安装Kibana
wget下载Kibana,并解压启动。
#wget下载kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.16.0-linux-x86_64.tar.gz
#解压
tar -zxvf kibana-7.16.0-linux-x86_64.tar.gz
#属主授权
chown -R elk.elk kibana-7.16.0-linux-x86_64
#修改配置文件
su elk
vi /usr/local/kibana-7.16.0-linux-x86_64/config/kibana.yml
加入以下配置
elasticsearch.hosts: ["http://localhost:9200"]
启动kibana
cd /usr/local/kibana-7.16.0-linux-x86_64/bin
./kibana &