1、架构
选用流行的日志选型框架,Elasticsearch+Logstash+Kibana
- Elasticsearch:存储日志,提供搜索功能
- Logstash:监控,过滤,收集日志
- Kibana : 提供web界面,支持查询,统计和图标展现
除了使用ELK之外,还采用Filebeat收集应用主机上的日志。
- Filebeat:一个轻量级开源日志文件数据搜索器,Filebeat读取文件内容,发送到Logstash进行解析后进入Elasticsearch,或者直接发送到Elasticsearch进行集中式存储和分析。
原理:
- Filebeat负责收集应用写到磁盘上的日志,并将日志发送给logstash。
- logstash处理来自filebeat的日志,并将处理后的日志保存elasticsearch索引库。
- elasticsearch存储来自logstash的日志。
- kibana从elasticsearch搜索日志,并展示到页面。
2、部署
本次测试验证采集测试环境2个应用的业务日志。
2.1、应用部署
为了简单,并且节省资源,elasticsearch、logstash、kibana全部部署在10.16.44.193主机上,在项目中使用本方案,可根据实际需求进行分布式节点扩展。
分别部署filebeat在2个被采集应用的主机上。
2.2、采集流程
1)首先部署filebeat在应用主机,采集日志后将日志输出到193主机上的logstash
2)logstash接收到filebeat传输的应用日志后,将日志再次输入到elasticsearch中
3)kibana中配置elasticsearch信息
4)在kibana页面检索日志
2.3、下载地址
- Elasticsearch
下载地址:https://www.elastic.co/downloads/elasticsearch
版本号:7.14.1
- Logstash
下载地址:https://www.elastic.co/downloads/logstash
版本号:7.14.1
- Kibana
下载地址:https://www.elastic.co/downloads/kibana
版本号:7.14.1
- Filebeat
下载地址:https://www.elastic.co/downloads/beats/filebeat
版本号:7.14.1
3、配置
3.1、filebeat配置文件
filebeat.inputstype log paths /home/admin/taobao-tomcat-production-7.0.59.3/logs/catalina.out output.logstash#logstash的IP:PORT hosts"10.16.44.193:5044"
3.2、logstash配置文件
input #采用beats插件 beats #监听5044端口 port => 5044 output elasticsearch #elsaticsearch IP+PORT hosts => "10.16.44.193:9200"#设置索引 index => "amc-log"
3.3、elasticsearch配置文件
# ======================== Elasticsearch Configuration =========================# ---------------------------------- Cluster -----------------------------------#是否开启跨域访问http.cors.enabled true ##跨域连接相关设置 http.cors.allow-origin"*"http.cors.allow-headers Authorization cluster.name Es-test ## ------------------------------------ Node ------------------------------------# Use a descriptive name for the node:node.name test-1 node.mastertrue# ----------------------------------- Paths ------------------------------------# Path to log files:path.logs /home/admin/es/logs # ---------------------------------- Network -----------------------------------network.host0.0.0.0http.port9200# --------------------------------- Discovery ----------------------------------## Pass an initial list of hosts to perform discovery when this node is started:# The default list of hosts is ["127.0.0.1", "[::1]"]transport.tcp.compresstruediscovery.seed_hosts"10.16.44.193""10.16.44.194""10.16.44.195"cluster.initial_master_nodes"test-1"
3.4、kibana配置文件
# Kibana is served by a back end server. This setting specifies the port to use.server.port5601server.host"10.16.44.193"# The Kibana server's name. This is used for display purposes.server.name"your-hostname"# The URLs of the Elasticsearch instances to use for all your queries.#设置elasticsearch主机ip+端口elasticsearch.hosts"http://10.16.44.193:9200"# Kibana uses an index in Elasticsearch to store saved searches, visualizations and# dashboards. Kibana creates a new index if the index doesn't already exist.kibana.index".kibana"#设置elasticsearch用户名和密码 如果有的话#elasticsearch.username: "kibana_system"#elasticsearch.password: "pass"
注:此处展示的是其中一个应用的filebeat配置文件,另外一个应用的配置文件除了端口号不同,其余相同;logstash配置文件此处展示其中一个应用的,另外一个应用同理。
4、启动
filebeat:nohup ./filebeat -e -c filebeat.yml > filebeat.log &;tail -f filebeat.log
kibana:nohup ./kibana &
logstash:nohup ./logstash &
elasticsearch:./elasticsearch
5、查看日志
- 访问kibana页面:
- 创建索引
选择右上角创建索引
输入索引名称,点击下一步,与elasticsearch中创建的索引匹配
- 检索日志
Discover查询索引下日志
时间检索:@timestamp < "2021-12-15T10:55:59"
关键字检索:610111111111111112112154656559
6、Loki和ELK日志方案的比较
优点 |
缺点 |
|
ES+Logstash+Filebeat+kibana |
1、可实现更复杂的查询; 2、适合根据需求在kibana制作图表,更加可视化; 3、分片机制提供更好的分布性,将索引分割到不同容器或者分片中,可以存在单个节点或多个节点,在集群节点间平衡这些分片,为了更好地扩展索引和搜索负载; 4、分片高可用,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以照常运行,并会把由于服务器宕机丢失的复制恢复到其它可用节点上,复制每个分片提供数据备份,防止硬件问题导致数据丢失; 5、Kibana是ELK堆栈的一部分,用于数据分析和日志监视。 6、将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。 |
1、Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患;Filebeat替换了Logstash,将Filebeat部署在应用端,Filebeat可以防止数据丢失,解决了logstash在系统中占用资源高的问题,但可能会发送重复。 2、ES存储内容最多,因此存储成本比较高 3、数据库字段太多,查询太慢,索引没有办法再做优化。 4、允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,操作苦难。很多功能往往用不上,大多数查询只关注一定时间范围和一些简单的参数(如host、service等),使用这些解决方案就有点杀鸡用牛刀的感觉了。 5、询消耗CPU资源高; 6、Kibana的仪表盘是公开的,没有进行基于角色的访问控制。如果你需要针对多个用户设置不同的权限级别,就得增加额外的配置预算采购 Shield了。 7、Kibana 旨在仅与 Elasticsearch 一起使用,因此不支持任何其他类型的数据源。 8、日志查询界面与服务器中日志展示的格式不一致,不直观 |
Loki+promtail+grafana |
1、资源消耗少,轻便 2、Grafana 附带内置用户控制和身份验证机制,允许您限制和控制对仪表板的访问,包括使用外部 SQL 或 LDAP 服务器。此外,Grafana 的 API可用于保存特定仪表板、创建用户和更新数据源等任务。您还可以创建特定的 API 密钥并将它们分配给特定的角色。 3、使用了类似Prometheus的方式进行日志的匹配过滤,查询速度快; 4、只索引与日志相关的元数据标签 ,而日志内容则以压缩方式存储于对象存储中, 不做任何索引。相较于ES这种全文索引的系统,数据可在十倍量级上降低,加上使用对象存储,最终存储成本可降低数十倍甚至更低, 5、特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引; 6、Grafana 原生支持; 7、Grafana支持多数据源 8、日志查询界面与服务器的日志输出展示一致,更直观 9、Loki 允许多个租户使用单个 Loki 实例。不同租户的数据与其他租户完全隔离。通过在代理中分配租户 ID 来配置多租户。 10、Loki 在小范围内运行良好。在单进程模式下,所有需要的微服务都在一个进程中运行。单进程模式非常适合测试 Loki、在本地运行或小规模运行。Loki 还旨在为大规模安装进行横向扩展。Loki 的每个微服务组件都可以分解为单独的进程,并且配置允许对组件进行单独扩展。 |
1、 grafana中不支持loki的图表形式,只有log形式; 2、 受制于该工具比较新,很多地方还待完善。如dashboard对Loki的支持力度远远不够,基于Loki日志的告警目前也很不方便。 |
笔者正在尝试将项目日志方案替换为Loki+promtail+grafana,以上供大家参考。
THE END