赞
踩
现在的系统大多比较复杂,一个服务的背后可能就是一个集群的机器在运行,各种访问日志、应用日志、错误日志量随着访问量和时间会越来越多,运维人员就无法很好的去管理日志,开发人员排查问题,需要到服务器上查日志,极为不方便。逐台登陆机器去查看日志特别费力,且效率慢。
在日志分析场景一般使用最多的就是通过 grep、awk 命令获取想要的日志信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大、难以归档、搜索慢、多维度查询困难等。
如果像搜索引擎一样通过关键字搜索出相关的日志,岂不快哉。于是就有了集中式日志系统。ELK 就是其中一款使用最多的开源产品。
常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
一个完整的集中式日志系统,需要包含以下几个主要特点:
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
ELK(Elasticsearch + Logstash + Kibana)是一套开源的日志管理方案,三者组合在一起搭建实时的日志分析平台。
这是最简单的一种 ELK 架构方式。此架构由 Logstash 分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的 Elasticsearch 进行存储。Elasticsearch 将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置 Kibana Web 方便的对日志查询,并根据数据生成报表。
优点:搭建简单,易于上手。
缺点:Logstash 耗资源较大,占用 CPU 和内存高。另外没有消息队列缓存,存在数据丢失隐患。
为解决传统 ELK 架构上的不足,对此进行了以下扩展:
Filebeat:一个轻量级日志采集器,早期的 ELK 架构中使用 Logstash 收集、解析日志,但是 Logstash 对内存、cpu、io 等资源消耗比较高,相比 Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。
Kafka:一种高吞吐量的分布式发布订阅消息系统,如果日志量巨大,还需要引入Kafka用以均衡网络传输,降低网络闭塞,保证数据不丢失,还可以系统之间解耦,具有更好的灵活性和扩展性。
filebeat 收集需要提取的日志文件,将日志文件转存到 kafka 中,logstash 处理 kafka 日志,格式化处理,并将日志输出到 elasticsearch 中,前台页面通过 kibana 展示日志。
使用 kafka 做缓存层,而不是直接将 filebeat 收集到的日志信息写入 logstash,让整体结构更健壮,减少网络环境,导致数据丢失。filebeat 负责将收集到的数据写入 kafka,logstash 取出数据并处理。
即解决的资源消耗过大问题,也解决了消息可能丢失的隐患。
- jdk:17
- kafka:3.3.2
- elasticsearch:7.17.10
- filebeat:7.17.10
- kibana:7.17.10
- logstash:7.17.10
配置 JDK 环境,elasticsearch:7.17.10 需要 Java 11 以上的版本。
1、下载并解压
新版的 kafka 已经内置了一个 zookeeper 环境,所以我们可以直接使用。
2、配置 zookeeper
zookeeper.properties
- # 数据文件目录
- dataDir=/data/zookeeper/data
- # 客户端连接端口
- clientPort=2181
- # 客户端最大连接数限制
- maxClientCnxns=0
- admin.enableServer=false
启动
./bin/zookeeper-server-start.sh ./config/zookeeper.properties &
2、配置 kafka
server.properties
- # 监听
- listeners=PLAINTEXT://192.168.200.11:9092
- # 日志存放路径
- log.dirs=/data/logs/kafka
- # zookeeper地址和端口
- zookeeper.connect=192.168.200.11:2181
启动
./bin/kafka-server-start.sh ./config/server.properties &
3、测试
生产者发送消息测试
./bin/kafka-console-producer.sh --topic test --bootstrap-server 192.168.200.11:9092
消费者消费消息测试
./bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 192.168.200.11:9092
如上面所说,简单搭建的 ELK 是有缺陷的,如果 Logstash 需要添加插件,那就全部服务器的 Logstash 都要添加插件,扩展性差。所以就有了 FileBeat,占用资源少,只负责采集日志,不做其他的事情。
1、下载并解压
2、配置 filebeat.yml 文件
- # ============================== Filebeat inputs ===============================
-
- filebeat.inputs:
- - type: log
- id: filebeat-user-log
- enabled: true
- paths:
- - /data/logs/*.log
- # 定义日志标签,注意:不同的服务使用不同的标签
- tags: ["user-log"]
-
- # 注释掉
- # ---------------------------- Elasticsearch Output ----------------------------
- #output.elasticsearch:
- # Array of hosts to connect to.
- # hosts: ["localhost:9200"]
-
- # Protocol - either `http` (default) or `https`.
- #protocol: "https"
-
- # Authentication credentials - either API key or username/password.
- #api_key: "id:api_key"
- #username: "elastic"
- #password: "changeme"
-
- # 新增
- # ------------------------------ kafka Output -------------------------------
- output.kafka:
- enable: true
- hosts: ["192.168.200.11:9092"]
- topic: "elk_logs_topic"
3、启动
启动Filebeat,需要指定配置文件,即刚才配置好的 filebeat.yml
./filebeat -c filebeat.yml &
注意
filebeat.yml 文件权限为 644,否则会报错:Exiting: error loading config file: config file ("filebeat.yml") can only be writable by the owner but the permissions are "-rw--w--w-" (to fix the permissions use: 'chmod go-w /opt/filebeat/7.17.10/filebeat.yml')
权限分别由三个数字表示:
- r = 4
- w = 2
- x = 1
使用数字表示权限时,每组权限分别对应数字之和:
- rw = 4 + 2 = 6
- rwx = 4 + 2 + 1 = 7
- r-x = 4 + 1 = 5
1、下载并解压
2、创建用户
root用户不能启动 elasticsearch 需要创建独立的用户
useradd elastic
3.修改文件归属用户
chown -R elastic:elastic 7.17.10/
切换用户
su elastic
4、配置 config/elasticsearch.yml 文件
- http.port: 9200
- http.host: 0.0.0.0
- http.cors.enabled: true
- http.cors.allow-origin: "*"
- http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
- # 如果需要设置密码需要开启下面两行
- # xpack.security.enabled: true
- # xpack.security.transport.ssl.enabled: true
5、启动
./bin/elasticsearch &
6、测试
- [elastic@localhost 7.17.10]$ curl 192.168.200.11:9200
- {
- "name" : "localhost.localdomain",
- "cluster_name" : "elasticsearch",
- "cluster_uuid" : "6_zpcReFSTuR9hgkj9eOKg",
- "version" : {
- "number" : "7.17.10",
- "build_flavor" : "default",
- "build_type" : "tar",
- "build_hash" : "fecd68e3150eda0c307ab9a9d7557f5d5fd71349",
- "build_date" : "2023-04-23T05:33:18.138275597Z",
- "build_snapshot" : false,
- "lucene_version" : "8.11.1",
- "minimum_wire_compatibility_version" : "6.8.0",
- "minimum_index_compatibility_version" : "6.0.0-beta1"
- },
- "tagline" : "You Know, for Search"
- }
使用 FileBeat 采集日志时就可以把 Logstash 抽出来,做一些滤处理之类的工作。
1、下载并解压
2、配置 config/logstash.yml 文件
node.name: local
3、创建 logstash-kafka.conf 配置文件
- input {
- kafka {
- bootstrap_servers => ["192.168.200.11:9092"]
- group_id => "elk_logs_group"
- topics => ["elk_logs_topic"]
- consumer_threads => 5
- codec => json {
- charset => "UTF-8"
- }
- }
- }
-
- output {
- # 按照日志标签对日志进行分类处理,日志标签在 filebeat 中定义
- if "user-log" in [tags] {
- elasticsearch {
- hosts => ["http://192.168.200.11:9200"]
- index => "user-log-%{+YYYY.MM.dd}"
- # user => "elastic"
- # password => "elastic"
- }
- }
- if "order-log" in [tags] {
- elasticsearch {
- hosts => ["http://192.168.200.11:9200"]
- index => "order-log-%{+YYYY.MM.dd}"
- # user => "elastic"
- # password => "elastic"
- }
- }
- }
注意,需要保证格式的正确,且不能大写,要不然 LogStash会抛出异常。
3、启动
./bin/logstash -f ./config/logstash-kafka.conf &
1、下载并解压
2、创建用户
root用户不能启动 kibana 需要创建独立的用户
useradd kibana
3、修改文件拥有用户
chown -R kibana:kibana 7.17.10/
切换用户
su kibana
4、配置 kibana.yml 文件
- server.port: 5601
- server.host: "192.168.200.11"
- elasticsearch.hosts: ["http://192.168.200.11:9200"]
- # 中文页面
- i18n.locale: "zh-CN"
5、启动
./bin/kibana
6、测试
打开浏览器输入 localhost:5601 ,如果能打开说明启动成功。
到此,程序安装工作就已经结束了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。