ELK—日志收集系统
1.要收集哪些日志?
①系统日志–为监控做准备
②服务日志–数据库–MySQL–慢查询日志、错误日志、普通日志
③业务日志–log4j(必须要收集的是业务日志)
注:log4j—Java类的数据业务日志
(1)要有针对性的去收集
(2)调整日志级别
2.日志收集后,如何展示?(可视化)
①kibana
②grafana
3.日志收集展示出来后,怎么使用?
①用于给大数据进行分析,作为立体化展示的数据源
②给研发使用(排障、解决bug等等)
③统计数据流量、作为分析报告的数据源
ELK工作原理
【APPServer集群】–》【logstash Agent 采集器】–》【ElasticEsarch Cluster】–》【Kibana Server]–》【Browser】
Logstash收集AppServer产生的log,并存放到ElasticSearh集群中,而Kibana则从ES集群中查询数据生产图表,再返回给Browser。简单来说,进行日志处理分析,一般需要经过一下几个步骤
①将日志进行集中化管理(beats)
filebeat
topbeat
②将日志格式化(logstash)
③对格式化后的数据进行索引和存储(elasticsearch)
④前端数据的展示(kibana)
elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
elasticsearch的基础核心概念
1、接近实时(NRT)
是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
2、集群(cluster)
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。
一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
3、节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能.像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名.当然,你可以自己定义.该名字也很重要,在集群中用于识别服务器对应的节点.
节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。
4、索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识〈必须全部是小写字母的〉,并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
索引相对于关系型数据库的库。
5、类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
类型相对于关系型数据库的表
6、文档(document)
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而uSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。
文档相对于关系型数据库的列。
7、分片和副片(shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上.或者从单个节点搜索请求太慢下飞为了解决这个问题,elasticsearchn提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
**注:**分片的作用:
1.水平分割扩展,增大存储量
2.分布式并行跨分片操作,提高性能和吞吐量
副本的作用:
1.高可用性,以应对分片或者节点故障。出于这个原因,分片和副本要在不同的节点上
2.增大吞吐量,搜索可以并行在所有副本上执行
默认情况下ES是5个分片和一个副本
logstash
Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JWM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能.
Logstash的理念很简单,它只做3件事情:
①Collect:数据输入
②Enrich:数据加工,如过滤,改写等
③Transport:数据输出
logstash主要组件
1.Shipper: 日志收集者
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent〉只需要运行这个组件即可;
2.Indexer:日志存储者
负责接收日志并写入到本地文件。
3.Broker:日志Hub
负责连接多个shipper和多个Indexer
4.Search and Storage:允许对事件进行搜索和存储;
5.web Interface:基于web的展示界面
kibana
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用米搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。
主要功能
1、Elasticsearch无缝之集成。Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。
2、整合你的数据。Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。
3、复杂数据分析。Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。
4、让更多团队成员受益。强大的数据库可视化接口让各业务岗位都能够从数据集合受益。
5、接口灵活,分享更容易。使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。
6、配置简单。Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带web服务器,可以快速启动运行。
7、可视化多数据源。Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到slasticsearch,支持的第三方技术包括Apache Flume、Fluentd等。
8、简单数据导出。Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。
注:ES生产环境用的版本是7.10与7.20:,这两个版本启动必须是非root用户
实际操作
1、创建集群
1、配置基础环境
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@node1 ~]
192.168.223.101 node1
192.168.223.102 node2
192.168.223.103 httpd
[root@node1 ~]
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
2、部署elasticserch环境
[root@node1 ~]
[root@node1 opt]
rh
[root@node1 opt]
rz waiting to receive.
[root@node1 opt]
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
1:elasticsearch-0:5.5.0-1
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
[root@node1 opt]
[root@node1 opt]
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
3、更改配置文件
[root@node1 opt]
[root@node1 elasticsearch]
elasticsearch.yml jvm.options log4j2.properties scripts
[root@node1 elasticsearch]
17 cluster.name: my-cluster
23 node.name: node1
33 path.data: /data/elk_data
37 path.logs: /var/log/elasticsearch/
43 bootstrap.memory_lock: false
55 network.host: 0.0.0.0
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 elasticsearch]
cluster.name: my-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "nide2"]
[root@node1 elasticsearch]
[root@node1 elasticsearch]
[root@node1 elasticsearch]
[root@node1 elasticsearch]
tcp6 0 0 :::9200 :::* LISTEN 42939/java
4、查看节点信息
查看集群状态
[root@node1 elasticsearch]
{
"cluster_name" : "my-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"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.0
}
[root@node1 elasticsearch]
{
"_nodes" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"cluster_name" : "my-cluster",
"timestamp" : 1641217410030,
"status" : "green",
"indices" : {
"count" : 0,
"shards" : { },
"docs" : {
"count" : 0,
"deleted" : 0
},
"store" : {
"size_in_bytes" : 0,
"throttle_time_in_millis" : 0
},
"fielddata" : {
"memory_size_in_bytes" : 0,
"evictions" : 0
},
"query_cache" : {
"memory_size_in_bytes" : 0,
"total_count" : 0,
"hit_count" : 0,
"miss_count" : 0,
"cache_size" : 0,
"cache_count" : 0,
"evictions" : 0
},
"completion" : {
"size_in_bytes" : 0
},
"segments" : {
"count" : 0,
"memory_in_bytes" : 0,
"terms_memory_in_bytes" : 0,
"stored_fields_memory_in_bytes" : 0,
"term_vectors_memory_in_bytes" : 0,
"norms_memory_in_bytes" : 0,
"points_memory_in_bytes" : 0,
"doc_values_memory_in_bytes" : 0,
"index_writer_memory_in_bytes" : 0,
"version_map_memory_in_bytes" : 0,
"fixed_bit_set_memory_in_bytes" : 0,
"max_unsafe_auto_id_timestamp" : -9223372036854775808,
"file_sizes" : { }
}
},
"nodes" : {
"count" : {
"total" : 2,
"data" : 2,
"coordinating_only" : 0,
"master" : 2,
"ingest" : 2
},
"versions" : [
"5.5.0"
],
"os" : {
"available_processors" : 4,
"allocated_processors" : 4,
"names" : [
{
"name" : "Linux",
"count" : 2
}
],
"mem" : {
"total_in_bytes" : 7635124224,
"free_in_bytes" : 713814016,
"used_in_bytes" : 6921310208,
"free_percent" : 9,
"used_percent" : 91
}
},
"process" : {
"cpu" : {
"percent" : 0
},
"open_file_descriptors" : {
"min" : 163,
"max" : 163,
"avg" : 163
}
},
"jvm" : {
"max_uptime_in_millis" : 540964,
"versions" : [
{
"version" : "1.8.0_131",
"vm_name" : "OpenJDK 64-Bit Server VM",
"vm_version" : "25.131-b12",
"vm_vendor" : "Oracle Corporation",
"count" : 2
}
],
"mem" : {
"heap_used_in_bytes" : 263309320,
"heap_max_in_bytes" : 4260102144
},
"threads" : 54
},
"fs" : {
"total_in_bytes" : 75645067264,
"free_in_bytes" : 67942158336,
"available_in_bytes" : 67942158336
},
"plugins" : [ ],
"network_types" : {
"transport_types" : {
"netty4" : 2
},
"http_types" : {
"netty4" : 2
}
}
}
}
2、主机安装elasticsearch插件
1.安装node
[root@httpd ~]
[root@httpd ~]
[root@httpd opt]
gfsrepo gfsrepo.tar.gz rh
[root@httpd opt]
rz waiting to receive.
[root@httpd opt]
gfsrepo gfsrepo.tar.gz node-v8.2.1.tar.gz rh
[root@httpd opt]
[root@httpd opt]
gfsrepo gfsrepo.tar.gz node-v8.2.1 node-v8.2.1.tar.gz rh
[root@httpd opt]
[root@httpd node-v8.2.1]
[root@httpd node-v8.2.1]
2.安装phantomjs
[root@httpd opt]
[root@httpd src]
rz waiting to receive.
[root@httpd src]
phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@httpd src]
[root@httpd src]
[root@httpd phantomjs-2.1.1-linux-x86_64]
[root@httpd bin]
3.安装elasticsearch-head
[root@httpd opt]
[root@httpd src]
[root@httpd src]
[root@httpd src]
[root@httpd elasticsearch-head]
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
up to date in 3.968s
[root@httpd opt]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@httpd opt]
[root@httpd opt]
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 49063/java
tcp6 0 0 ::1:9200 :::* LISTEN 49063/java
[root@node1 elasticsearch-head]
|