ELK简介
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
- ElasticSearch
-
- ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
- Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。
- Elasticsearch 是个分布式搜索和分析引擎,优点是能对大容量的数据进行接近实时的存储、搜索和分析操作。
- Logstash
-
- Logstash:作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
- Logstash 由JRuby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
- Kiabana:
-
- Kiabana:是基于 Node.js 开发的展示工具,可以为 Logstash 和 ElasticSearch 提供图形化的日志分析 Web 界面展示,可以汇总、分析和搜索重要数据日志。
- Filebeat:
-
- Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。
为什么使用ELK
- 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
- 往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
- 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
完整日志系统的基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持 UI 分析
- 警告:能够提供错误报告,监控机制
ELK工作原理
- 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
- Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
- Elasticsearch 对格式化后的数据进行索引和存储。
- Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
一、安装部署Elasticsearch
1、下载elasticsearch
wget https://mirrors.huaweicloud.com/elasticsearch/7.8.0/elasticsearch-7.8.0-linux-x86_64.tar.gz
2、解压
tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz
3、修改配置文件
修改config/elasticsearch.yml
node.name: node-1 # 设置节点名
network.host: 0.0.0.0 # 允许外部 ip 访问
cluster.initial_master_nodes: ["node-1"] # 设置集群初始主节点
4、新建用户并赋权
adduser es
passwd es
chown -R es /opt/installs/elasticsearch
5、切换至新建的用户并启动Elasticsearch
切换至用户 es
su es
启动 ElasticSearch (-d 表示在后台启动)
[es@localhost elasticsearch-7.8.0]$ ./bin/elasticsearch -d
一下错误是由于在root下启动ES
6、启动之后可能会报以下二个错误
[es@elk elasticsearch]$ ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /opt/installs/elasticsearch/logs/elasticsearch.log
编辑 /etc/security/limits.conf
vi /etc/security/limits.conf,添加下面内容:
- soft nofile 65536
- hard nofile 131072
- soft nproc 2048
- hard nproc 4096
在/etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
执行sysctl -p 立即生效
修改elasticsearch.yml中的配置:
bootstrap.memory_lock: false
7、验证
返回以下内容
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "0O0vY-KPQAOe_0LYbRVHPg",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
查看节点是否健康:
http://elk:9200/_cluster/health?pretty
{
"cluster_name": "elasticsearch",
"status": "green", // 绿色表示健康
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
8、安装ES可视化管理工具ElasticView
二、安装部署 Kibana
1、下载
wget https://mirrors.huaweicloud.com/kibana/7.8.0/kibana-7.8.0-linux-x86_64.tar.gz
2、解压并重命名
tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz -C /opt/installs/
mv /opt/installs/kibana-7.8.0-linux-x86_64.tar.gz /opt/installs/kibana
3、修改配置文件
vim ./config/kibana.yml
服务端口 server.port: 5601
服务器ip 本机 server.host: "0.0.0.0"
Elasticsearch 服务地址 elasticsearch.hosts: ["http://localhost:9200"]
设置语言为中文 i18n.locale: "zh-CN"
4、授权并切换用户
chown -R es /opt/installs/kibana
su es
5、启动Kibana
注意:启动 Kibana 之前需要先启动 Elasticsearch
前台启动方式
./bin/kibana
后台启动方式
nohup ./bin/kibana &
6、在浏览器中访问Kibana
访问地址:http://elk:5601/
三、安装部署 Logstash
1、下载安装包
wget https://mirrors.huaweicloud.com/logstash/7.8.0/logstash-7.8.0.tar.gz
2、解压并重命名
tar -zxvf logstash-7.8.0.tar.gz -C /opt/installs/
mv /opt/installs/logstash-7.8.0 /opt/installs/logstash
3、复制一个新的配置文件并修改
cp config/logstash-sample.conf config/logstash-es.conf
vim config/logstash-es.conf
#输入 从控制台输入
input {
stdin{
}
}
#过滤器 默认时区是UTC时区 差8个小时所以就加8小时
filter {
date {
match => ["timestamp","ISO8601"]
target => "@timestamp"
}
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => ["timestamp"]
}
}
#输出
output {
#输出到elasticsearch
elasticsearch {
#指定elasticsearch服务器的地址和端口,多个ES服务器使用 "逗号空格" 隔开
hosts =>["elk:9200"]
#指定输出到elasticsearch 的索引格式
index =>"system-%{+YYYY.MM.dd}"
}
}
4、安装插件
由于国内无法访问默认的gem source,需要将gem source改为国内的源。
vim /opt/installs/logstash/Gemfile
将source这一行改成如下所示:
source"RubyGems.org | your community gem host"
安装jdk并配置好环境变量
./bin/logstash-plugin install logstash-codec-json_lines
5、启动Logstash
创建Logstash软链接
ln -s /opt/installs/logstash/bin/logstash /usr/local/bin/
授权并切换用户
chown -R es /opt/installs/logstash
su es
启动Logstash
logstash -f /opt/installs/logstash/config/logstash-es.conf
后台启动Logstash
nohup ./bin/logstash -f ./config/logstash-es.conf &
四、安装部署 Filebeat
1、下载安装包
wget https://mirrors.huaweicloud.com/filebeat/7.8.0/filebeat-7.8.0-linux-x86_64.tar.gz
2、解压并重命名
tar -zxvf lfilebeat-7.8.0-linux-x86_64.tar.gz -C /opt/installs/
mv /opt/installs/filebeat-7.8.0-linux-x86_64 /opt/installs/filebeat
3、创建软连接
ln -s /opt/installs/filebeat/filebeat /usr/local/bin/
4、赋权并切换es用户
chown -R es /opt/installs/filebeat
chmod go-w ./filebeat.yml
su es
5、修改filebeat.yml配置文件
6、启动filebeat
filebeat -e -c /opt/installs/filebeat/filebeat.yml