一篇文章带你了解企业级开源日志平台ELK的架构和搭建
ccwgpt 2024-10-22 10:17 28 浏览 0 评论
日志分析平台有助于运维人员和程序员实现故障预警和故障分析,当下大多数程序员处理的方式为在日志文件中使用grep、awk来获取自己想要的信息。但是随着数据量的增加,在海量的数据日志当中,通过这种传统的方式处理,远远不能满足程序员的需求,往往存在这些问题:
- 日志量过大,存在归档困难
- 文本的搜索太慢
- 无法进行多维度的查询
因此,需要一个平台能够集中式的、独立的、搜集管理各个服务和服务器上的日志信息,并且集中管理,提供良好的UI界面进行数据展示,处理分析。
ELK 是什么
ELK 是 elastic 公司旗下三款开源框架 ElasticSearch 、Logstash 、Kibana 的首字母的缩写。 它提供了一套解决方案,并且都是开源软件,三个软件之间相互配合使用,高效地满足了很多场景的应用。是当下主流的一种日志系统。
ELK 架构
以上是 ELK 技术栈的一个架构图。从图中可以清楚的看到数据流向:
- Beats 是单一用途的数据传输平台,它可以将多台机器的数据发送到 Logstash 或 ElasticSearch。目前Beats包含四种工具:
- Packetbeat(搜集网络流量数据)
- Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat(搜集文件数据)
- Winlogbeat(搜集 Windows 事件日志数据)
- Logstash 是一个动态数据收集管道。支持以 TCP/UDP/HTTP 多种方式收集数据(也可以接受 Beats 传输来的数据),并对数据做进一步丰富或提取字段处理。
- ElasticSearch 是一个基于 JSON 的分布式的搜索和分析引擎。作为 ELK 的核心,它集中存储数据。
- Kibana 是 ELK 的用户界面。它将收集的数据进行可视化展示(各种报表、图形化数据),并提供配置、管理 ELK 的界面。
ELK 经典应用场景
- Logstash部署至服务主机,对各个服务的日志进行采集、过滤、推送。
- Elasticsearch存储Logstash传送的结构化数据,提供给Kibana。
- Kibana提供用户UIweb页面进行,数据展示和分析形成图表等
注意:logs 泛指,各种日志文件以及日志信息:windows,negix,tomcat,webserver等等。
ELK 安装
2.1 elasticsearch安装(以CentOS6为例)
- 安装JDK1.8(此处略)
- 下载并安装GPG key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 添加yum仓库
vim /etc/yum.repos.d/elasticsearch.repo [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- 安装elasticsearch
yum install -y elasticsearch chkconfig --add elasticsearch
2.2 logstash安装
- 下载并安装GPG key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 添加yum仓库
cat>/etc/yum.repos.d/logstash.repo<<'EOF' [logstash-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
- 安装logstash
yum install -y logstash
2.3 kibana安装
- 下载并安装GPG key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 添加yum仓库
cat>/etc/yum.repos.d/kibana.repo<<EOF [kibana-6.x] name=Kibana repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
- 安装kibana
yum install -y kibana chkconfig --add kibana
ELK 配置
3.1 配置elasticsearch
- 修改elasticsearch配置文件
vim /etc/elasticsearch/elasticsearch.yml cluster.name: zy-es-cluster node.name: node-1 path.data: /alidata/es-data path.logs: /var/log/elasticsearch #锁住内存,使内存不会再swap中使用 bootstrap.memory_lock: true bootstrap.system_call_filter: false #这个参数是用来同时设置bind_host和publish_host两个参数,一般设置这个参数就行,特殊情况下可能需要分别设置 network.host: 0.0.0.0 #设置绑定的ip地址,默认为0.0.0.0,绑定这台机器的任何一个ip #network.bind_host: 0.0.0.0 #设置其它节点和该节点交互的ip地址,如果不设置它会自动判断。 #network.publish_host: X.X.X.X #设置对外服务的http端口,默认为9200 http.port: 9200 #设置节点之间交互的tcp端口,默认是9300 transport.tcp.port: 9300 #设置集群中节点 discovery.zen.ping.unicast.hosts: ["IP地址"] mkdir -p /alidata/es-data chown elasticsearch.elasticsearch /alidata/es-data
- 优化系统参数
vim /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 * soft memlock unlimited * hard memlock unlimited vim /etc/security/limits.d/90-nproc.conf * soft nproc 4096 root soft nproc unlimited
- 启动elasticsearch
设置java路径:
ln -sv /home/jdk1.8.0_121/bin/java* /usr/bin/ service elasticsearch start netstat -lntp|grep 9200
- 验证
[root@ysc-251 elasticsearch]# curl -X GET localhost:9200 { "name" : "node-1", "cluster_name" : "zy-es-cluster", "cluster_uuid" : "Hx_Vc1OASTi75iFCI2lWTQ", "version" : { "number" : "6.5.1", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "8c58350", "build_date" : "2018-11-16T02:22:42.182257Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
- 安装Head插件
新版elasticsearch不支持直接在plugins里运行插件,需单独安装。
yum install -y git npm git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm config set strict-ssl false npm install grunt -save #修改head连接es的地址: vim _site/app.js this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; 把localhost修改成es服务器外网地址,如: this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://IP地址:9200"; npm install npm run start & netstat -lntp |grep 9100 注:由于head插件监听的端口是9100,而elasticsearch的REST接口的端口是9200,因此需要设置elasticsearch允许跨域访问,才能使用head插件。 #修改elasticsearch支持跨域访问并重启 vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" service elasticsearch restart
浏览器访问http://ES外网地址:9100 即可访问head插件
3.2 配置logstash
- 查看已安装插件:
/usr/share/logstash/bin/logstash-plugin list
- 基本的输入输出
/usr/share/logstash/bin/logstash -e 'input{stdin{}} output{stdout{}}' 在终端输入 helloworld,回车看返回结果: 2018-11-30T07:39:58.021Z ysc-251 helloworld
- 写入到elasticsearch
/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["IP地址:9200"] } }'
在elasticsearch中查看logstash新加的索引
- 编写简单的测试conf文件
[root@ysc-251 conf.d]# cat normal.conf input { stdin { } } output { elasticsearch { hosts => ["IP地址:9200"] } stdout { codec => rubydebug } } 执行 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/normal.conf
- 默认分片副本为1,修改分片副本数量为1
curl -XPUT 'http://IP地址:9200/_all/_settings' -H 'Content-Type: application/json' -d '{ "index.number_of_replicas" : "1" }'
3.3 配置kibana
- 修改kibana配置文件
[root@ysc-251 elasticsearch-head]# grep '^[a-Z]' /etc/kibana/kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://IP地址:9200" kibana.index: ".kibana"
- 启动kibana
service kibana start
- 验证
浏览器访问IP地址:5601 在kibana中添加一个es-*索引 验证es的muliline插件是否生效
http://IP地址/status 可以查看kibana运行状态。
实际应用
收集nginx的访问日志
logstash可以通过內建模板解析Nginx日志字符串,不过直接在Nginx配置中直接json字符串最为方便。
从1.11.8开始Nginx已经支持json格式,如果版本低于这个建议使用nginx-http-json-log扩展。
编辑nginx.conf,在server节定义json日志格式
log_format logstash_json '{"@timestamp":"$time_iso8601",' '"remote_addr":"$remote_addr",' '"remote_user":"$remote_user",' '"body_bytes_sent":"$body_bytes_sent",' '"request_time":"$request_time",' '"status":"$status",' '"host":"$host",' '"uri":"$uri",' '"server":"$server_name",' '"port":"$server_port",' '"protocol":"$server_protocol",' '"request_uri":"$request_uri",' '"request_body":"$request_body",' '"request_method":"$request_method",' '"http_referrer":"$http_referer",' '"body_bytes_sent":"$body_bytes_sent",' '"http_x_forwarded_for":"$http_x_forwarded_for",' '"http_user_agent":"$http_user_agent",' '"upstream_response_time":"$upstream_response_time",' '"upstream_addr":"$upstream_addr"}';
然后Nginx配置下指定json模板日志格式
access_log /alidata/tengine/logs/access.log logstash_json ;
重启Nginx
使用logstash将nginx访问日志收集起来,继续写到all.conf中
input { file { path => "/alidata/tengine/logs/default.log" codec => json start_position => "beginning" type => "nginx-log" } } output { if [type] == "nginx-log" { elasticsearch { hosts => ["172.17.134.34:9200"] index => "nginx-log-%{+YYYY.MM.dd}" } } }
收集系统日志
[root@ysc-251 conf.d]# cat system.conf input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["172.17.134.34:9200"] index => "system-%{+YYYY.MM.dd}" } } [root@ysc-251 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf
相关推荐
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
-
1、安装iView新框架,支持VUE3npminstallview-ui-plus2、编辑src/main.js,添加以下内容,导入js和css到项目importViewUIPlusfrom...
- 万能前端框架uni app初探03:底部导航开发
-
前言本节我们使用uniapp的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的。一、基础知识1.tabBar如果应用是一个多tab应用,可以通过tabBar配...
- Rust Web 开发框架,前端你可以选择哪个?
-
Rust构建一切。在如今流行的语言中,Rust可谓是将构建和高效作为自己优美的身姿在大众视野中脱颖而出。它是一门赋予每个人构建可靠且高效软件能力的语言。它有什么特性呢?高性能。Rust速度惊人且内...
- 连载:前端开发中纠结的Javascript框架(上)
-
如今,前端开发有着许许多多的框架和库。其中一些好用,一些却不尽人意。通常我们会习惯性运用某一概念,模块或句法。事实上,并没有什么万能工具。这篇文章是关于未来框架的发展趋势——那就是没有框架!我从以下几...
- 前端开发框架的演进架构:提升用户体验和开发效率
-
前端开发框架是现代Web应用开发的重要工具,它不仅可以帮助开发者构建复杂的用户界面,还能够提升用户体验和开发效率。随着Web技术的不断发展,前端开发框架也在不断演进,为开发者提供了更丰富、更高效的工具...
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
-
为了要处理超高分辨率医疗图像数据,Google开发了一种空间数据分区(SpatialPartition)技术,在不牺牲图像分辨率的条件下,分析超高分辨率图像。Google使用Mesh-TensorF...
- 大模型安全挑战加剧:框架层漏洞成新靶心
-
近日,360数字安全集团发布了一份关于大模型安全漏洞的报告,揭示了当前大模型及围绕其构建的框架和应用中存在的严重安全问题。报告显示,360近期研究发现了近40个大模型相关的安全漏洞,其中既包括二进制内...
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
-
机器之心报道编辑:陈萍经过5个月的更新迭代,Keras3.0终于来了。「大新闻:我们刚刚发布了Keras3.0版本!」Keras之父FrancoisChollet在X上激动的...
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
-
导读:本文对TensorFlow的框架和基本示例进行简要介绍。作者:本杰明·普朗什(BenjaminPlanche)艾略特·安德烈斯(EliotAndres)来源:华章科技01TensorFlo...
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
-
鱼羊发自凹非寺量子位|公众号QbitAI终于,谷歌出面回应“TensorFlow遭弃”传闻:我们将继续致力于将TensorFlow打造为一流机器学习平台,与JAX并肩推动机器学习研究。这段时...
- 2025 年的PHP :现代 Web 开发的强大引擎
-
程序员还在吐槽PHP过时?2025年的PHP8.4直接封神了。看看最近更新的属性钩子、强类型系统,加上Laravel这些框架,老语言早就脱胎换骨。十年前说PHP弱类型容易崩代码的,现在脸疼不?联合类...
- 前端内卷终结者?htmx如何让开发者告别200行JS只做一个按钮
-
当你用React写一个点赞按钮需要引入3个状态管理库、编写80行JSX和120行钩子函数时,htmx只需要一行HTML:<buttonhx-post="/like"hx-sw...
- NativePHP桌面版V1.0正式发布(元气桌面电脑版下载)
-
导读:各位小伙伴,使用PHP构建桌面级系统的利器,NativePHP来了。概述NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用...
- PHP Laravel框架底层机制(php基本框架)
-
当然可以,Laravel是最受欢迎的PHP框架之一,以优雅的语法和丰富的生态而闻名。尽管开发体验非常“高端”,它的底层其实是由一系列结构清晰、职责分明的组件构成的。下面我从整体架构、核心流程、...
- PHP框架之Laravel框架教程:2. 控制器、路由、视图简单介绍
-
2.控制器、路由、视图简单介绍我们先建立控制器,目录是:app/Http/Controllers,新建控制器Ding.php,代码如下:Ding.php:<?phpnamespaceA...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
- 万能前端框架uni app初探03:底部导航开发
- Rust Web 开发框架,前端你可以选择哪个?
- 连载:前端开发中纠结的Javascript框架(上)
- 前端开发框架的演进架构:提升用户体验和开发效率
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
- 大模型安全挑战加剧:框架层漏洞成新靶心
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)