尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

企业级监控与日志分析平台部署实战:Zabbix Proxy、Grafana 与 ELK 栈

企业级监控与日志分析平台部署实战:Zabbix Proxy、Grafana 与 ELK 栈 1. 概述本文档详细记录了在企业环境中部署分布式监控与日志分析平台的完整流程。2. 分布式监控Zabbix Proxy 用于在分布式环境中代理 Zabbix Agent 的数据采集减轻 Server 压力并优化网络流量。2.1 安装 Zabbix Proxy在 Proxy 主机上执行以下命令# 添加 Zabbix 6.0 官方仓库rpm-Uvhhttps://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpm# 安装 Zabbix Proxy 及 MySQL 支持包dnfinstallzabbix-proxy-mysql zabbix-sql-scripts2.2 配置后端数据库Zabbix Proxy 支持多种数据库此处以 MySQL 为例。# 安装 MySQL 服务器dnfinstall-ymysql-server systemctlenable--nowmysqld# 登录 MySQL 并创建数据库与用户mysql-uroot在 MySQL 交互界面执行-- 创建专用于 Zabbix Proxy 的数据库使用 utf8mb4 字符集CREATEDATABASEzabbix_proxyCHARACTERSETutf8mb4COLLATEutf8mb4_bin;-- 创建本地用户 zabbix 并设置密码CREATEUSERzabbixlocalhostIDENTIFIEDBYpassword;-- 授予该用户对 zabbix_proxy 数据库的全部权限GRANTALLPRIVILEGESONzabbix_proxy.*TOzabbixlocalhost;-- 允许创建信任的函数Zabbix 初始化脚本需要SETGLOBALlog_bin_trust_function_creators1;-- 退出 MySQLQUIT;导入 Zabbix Proxy 数据库 schema# 使用 zabbix 用户导入初始化 SQL 脚本cat/usr/share/zabbix-sql-scripts/mysql/proxy.sql|mysql --default-character-setutf8mb4-uzabbix-pzabbix_proxy2.3 配置 Zabbix Proxy编辑主配置文件/etc/zabbix/zabbix_proxy.conf关键配置项如下# Zabbix Server 的 IP 地址 Server192.168.150.154 # 数据库连接密码 DBPasswordpassword # Java Gateway 地址用于 JMX 监控 JavaGateway192.168.36.154 # 启动的 Java 轮询进程数 StartJavaPollers52.4 启动服务与排错# 设置开机自启并立即启动服务systemctlenable--nowzabbix-proxy# 查看启动日志初始阶段因 Server 端未定义 Proxy 会报错属正常现象tail-f/var/log/zabbix/zabbix_proxy.log后续步骤在 Zabbix Server Web 界面创建 Proxy 代理地址填写 Proxy 主机的 IP。设置agent端用proxy采集数据查看日志是否报错cat /var/log/zabbix/zabbix_proxy.log修改agent配置vim/etc/zabbix/zabbix_agentd.confServer192.168.150.152#指向proxy主机IPServerActive192.168.150.152重启服务systemctl restart zabbix-agent查看日志是否有报错cat /var/log/zabbix/zabbix_agentd.log3. Grafana 数据可视化集成Grafana 提供强大的数据可视化能力可通过插件集成 Zabbix 数据源。3.1 安装与启动 Grafana# 添加 Grafana 企业版仓库并安装yuminstall-yhttps://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.0-1.x86_64.rpm# 启动服务systemctlenable--nowgrafana-server.service# 验证服务端口 (3000)netstat-antlp|grep:3000访问http://grafana_server_ip:3000默认账号密码为admin/admin。3.2 安装 Zabbix 数据源插件搜索zabbix没有安装插件没有zabbix数据源点击插件和数据搜索zabbix点击安装或者https://grafana.com/grafana/plugins/或者通过命令行安装grafana-cli pluginsinstallalexanderzobnin-zabbix-app systemctl restart grafana-server安装后启用插件并添加新的 Zabbix 数据源填写 Zabbix Server 的 URL 及认证信息例如用户Admin密码zabbix点击Save Test验证连接。点击保存并测试3.3 创建监控仪表盘在 Grafana 中创建新的数据面板选择刚刚添加的 Zabbix 数据源即可开始配置图表可视化监控指标。4. ELK 企业级日志分析平台部署ELK 栈 (Elasticsearch, Logstash, Kibana) 用于集中式日志收集、处理、存储与可视化。4.1 集群规划与环境准备主机IP角色server1192.168.150.160Elasticsearch 节点server2192.168.150.161Elasticsearch 节点server3192.168.150.162Elasticsearch 节点server4192.168.150.163Cerebro (集群管理)server5192.168.150.164Kibana Logstash4.2 Elasticsearch 集群部署在所有 ES 节点 (server1,server2,server3) 上执行# 安装 Elasticsearchrpm-ivhelasticsearch-7.6.1-x86_64.rpm编辑配置文件/etc/elasticsearch/elasticsearch.yml# 集群名称所有节点必须一致cluster.name:my-es# 数据与日志路径path.data:/var/lib/elasticsearchpath.logs:/var/log/elasticsearch# 锁定内存防止交换bootstrap.memory_lock:true# 监听所有网络接口network.host:0.0.0.0http.port:9200# 集群节点发现discovery.seed_hosts:[server1,server2,server3]cluster.initial_master_nodes:[server1,server2,server3]优化系统参数编辑/etc/security/limits.conf为elasticsearch用户增加限制elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited elasticsearch - nofile 65535 elasticsearch - nproc 4096编辑 systemd 服务文件vim /usr/lib/systemd/system/elasticsearch.service在[Service]段添加LimitMEMLOCKinfinity禁用交换分区以提高性能swapoff-avim/etc/fstab#/dev/mapper/rhel-swap swap swap defaults 0 0应用配置并启动服务systemctl daemon-reload systemctlenable--nowelasticsearch# 验证服务curllocalhost:9200配置同步与 SSH 免密在server1上配置好后将配置文件复制到其他节点并配置 SSH 免密登录以便管理。# 在 server1 上生成密钥并分发ssh-keygen ssh-copy-id server2 ssh-copy-id server3# 复制配置文件4.3 Cerebro 集群管理界面部署Cerebro 是 Elasticsearch 集群的图形化管理工具。# 在 server4 上安装 Dockercd/etc/yum.repos.d/wgethttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yuminstalldocker-ce-ysystemctlenable--nowdocker用docker info查看无警告报错# 导入 Cerebro 镜像并运行容器dockerload-icerebro.tardockerrun-d--namecerebro-p9000:9000 lmenezes/cerebrodocker start cerebro启动容器访问http://server4_ip:9000输入任一 ES 节点地址即可管理集群。4.4 配置节点角色可选为优化集群可以指定节点角色。编辑每个节点的elasticsearch.ymlvim /etc/elasticsearch/elasticsearch.ymlserver1 (协调/预处理节点):node.master:truenode.data:falsenode.ingest:truenode.ml:falseserver2 server3 (数据/主节点):node.master:truenode.data:truenode.ingest:falsenode.ml:false修改后重启各节点 Elasticsearch 服务。4.5 Logstash 部署与基础配置在server5上安装 Logstash 作为日志处理中心。# 安装 JDK 11 作为运行环境yuminstall-yjdk-11.0.15_linux-x64_bin.rpm# 安装 Logstashyuminstall-ylogstash-7.6.1.rpm测试运行/usr/share/logstash/bin/logstash-einput { stdin { } } output { stdout {} }输入文本后能在控制台看到结构化输出说明安装成功。基础配置文件(vim /etc/logstash/conf.d/ec.conf)input{stdin{}}output{stdout{}elasticsearch{hosts192.168.150.160:9200indexlogstash-%{YYYY.MM.dd}}}使用-f参数指定配置文件启动/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/ec.conf启动成功后录入数据ctrlc退出4.6 辅助工具与插件Elasticsearch Head 插件部署于server4用于通过浏览器查看 ES 集群状态和数据。安装依赖yuminstall-ybzip2tarjxf phantomjs-2.1.1-linux-x86_64.tar.bz2cdphantomjs-2.1.1-linux-x86_64cpbin/phantomjs /usr/local/bin/ 安装依赖 yuminstall-yfontconfig 运行 phantomjs 安装插件rpm-ivhnodejs-9.11.2-1nodesource.x86_64.rpm yuminstall-yunzipunzipelasticsearch-head-master.zipcdelasticsearch-head-master/npminstall--registryhttps://registry.npmmirror.com/vim_site/app.js#查找localhost将其改为要访问的节点ip启动服务npmrun startnetstat-antlp|grep:9100访问http://192.168.150.163:9100/直接访问访问不了需要再es配置中添加vim/etc/elasticsearch/elasticsearch.yml http.cors.enabled:truehttp.cors.allow-origin:*http.cors.enabled: true作用开启 Elasticsearch 的跨域资源共享CORS支持。http.cors.allow-origin: *作用允许任意来源域名、IP跨域访问 Elasticsearch。重启服务systemctl restart elasticsearch.service可以进行数据查询关掉正在使用的节点会转到备用节点5. Logstash 高级输入与过滤配置5.1 File 输入插件采集系统日志配置 Logstash 从文件读取日志例如/var/log/messages。# /etc/logstash/conf.d/file-input.confinput{file{path/var/log/messagesstart_positionbeginning# 从文件开头读取}}output{stdout{}elasticsearch{hosts192.168.150.160:9200indexmessages-%{YYYY.MM.dd}}}关于.sincedb文件Logstash 会记录文件读取进度到$HOME/.sincedb_*文件。如需重新从头读取文件需删除对应的.sincedb文件。sincedb文件保存文件读取进度避免数据冗余读取cd /usr/share/logstash/data/plugins/inputs/file/ [rootserver5 file]# l. . .. .sincedb_452905a167cf4509fd08acb964fdb20c [rootserver5 file]# cat .sincedb_452905a167cf4509fd08acb964fdb20c 34457675 0 64768 6937 1786422246.965386 /var/log/messages [rootserver5 file]# ls -i /var/log/messages 34457675 /var/log/messages #删掉该文件就可以从文件起始位置开始读 [rootserver5 file]# rm -fr .sincedb_452905a167cf4509fd08acb964fdb20c [rootserver5 file]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/ec.conf出现了新创建的messages5.2 Syslog 输入插件收集远程系统日志配置日志发送端(server1,server2,server3)cd /etc/logstash/conf.d/vim syslog.conf取消注释并修改$ModLoad imudp $UDPServerRun 514 *.* 192.168.56.14:514 # 表示 TCP 表示 UDP指向 Logstash 服务器 IP重启rsyslog服务。systemctl restart rsyslog.service配置 Logstash 接收端(server5)测试server1发送日志server5上能收到5.3 多行日志合并 (Multiline Codec)对于堆栈跟踪等跨越多行的日志需要使用multilinecodec 将其合并为单个事件。input{file{path/var/log/my-es.logstart_positionbeginningcodecmultiline{pattern^\[negatetruewhatprevious}}}output{stdout{}elasticsearch{hosts192.168.150.160:9200indexmyeslog-%{YYYY.MM.dd}}}核心作用是将多行日志合并成单个事件pattern “^[”设置匹配规则匹配以左方括号 [ 开头的行。(例如[ERROR]、[INFO] 这样的标准日志起始行)negate true对匹配结果取反。也就是说不匹配 ^[ 的行即不以 [ 开头的行会被视为需要处理的特殊行。what previous指定处理动作。将当前行合并到前一行的末尾此配置将把不以[开头的行合并到前一行常用于合并 Java 异常堆栈。启动/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf5.4 Grok 过滤解析结构化日志Grok 使用预定义的正则表达式模式来解析非结构化日志数据。测试 Grok 模式# /etc/logstash/conf.d/grok.confinput{stdin{}}filter{grok{match{message%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}}}}output{stdout{}}启动测试管道并输入示例日志55.3.244.1 GET /index.html 15824 0.043Logstash 会输出解析后的字段。测试yuminstall-yhttpd systemctl enablel--nowhttpdechowww.westos.org/var/www/html/index.html ab-c1-n100http://192.168.150.164/index.html查找日志格式cd/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/[rootserver5 patterns]# cat httpd进行appache日志访问管道采集vim /etc/logstash/conf.d/beats.conf6. Filebeat 轻量级日志采集器Filebeat 是轻量级的日志传输工具部署在应用服务器上将日志发送给 Logstash 或 Elasticsearch。6.1 安装与配置 Filebeat (以 Apache 日志为例)在应用服务器 (server4) 上yuminstall-yhttpdechoserver4/var/www/html/index.html systemctl start httpd.servicecurllocalhost# 安装 Filebeatrpm-ivhfilebeat-7.6.1-x86_64.rpm# 启用 Apache 模块cd/etc/filebeat/modules.d filebeat modulesenableapache# 配置 Apache 模块指定日志路径vimapache.ymlapache.yml内容示例-module:apacheaccess:enabled:truevar.paths:[/var/log/httpd/access_log*]error:enabled:truevar.paths:[/var/log/httpd/error_log*]6.2 配置输出到 ES编辑主配置文件/etc/filebeat/filebeat.ymloutput.logstash:hosts:[192.168.150.164:5044]# Logstash 服务器地址在 Logstash 服务器 (server5) 上配置 Beats 输入# /etc/logstash/conf.d/beats.confinput{beats{port5044}}filter{grok{match{message%{HTTPD_COMBINEDLOG}}}}output{elasticsearch{hosts[http://192.168.150.160:9200]indexapachelog-%{YYYY.MM.dd}}}6.3 启动与验证# 在 Filebeat 端检查配置并启动filebeattestconfig-c/etc/filebeat/filebeat.yml filebeattestoutput-c/etc/filebeat/filebeat.yml systemctlenable--nowfilebeat# 在 Logstash 端启动管道/usr/share/logstash/bin/logstash-f/etc/logstash/conf.d/beats.conf在server4上vim /etc/filebeat/filebeat.yml更改ip地址为配置logstash的ipsystemctl restart filebeat.service在server3上[rootserver3 ~]# systemctl enable --now httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [rootserver3 ~]# echo server3 /var/www/html/index.html [rootserver3 ~]# curl localhost cd /etc/filebeat/modules.d/ filebeat modules enable apache vim apache.ymlcd /etc/filebeat/vim filebeat.ymlsystemctl enable --now filebeat.service7. Kibana 数据可视化与仪表盘在server4上安装 Kibana 作为 ELK 栈的前端展示界面。rpm-ivhkibana-7.6.1-x86_64.rpm编辑配置文件/etc/kibana/kibana.yml# 指向 Elasticsearch 集群地址elasticsearch.hosts:[http://192.168.150.162:9200]# 设置中文界面i18n.locale:zh-CN启动 Kibana 服务systemctlenable--nowkibana# 检查服务端口 (5601)netstat-antlp|grep:5601访问 Kibana Web 界面http://server4_ip:5601。7.1 定制数据可视化在 Kibana 中您可以创建索引模式网站访问量访问量排行榜创建dashboard大屏展示8. Elasticsearch 数据备份与恢复Elasticsearch 的数据备份与恢复主要通过快照Snapshot和恢复Restore机制实现依赖于共享存储仓库如 NFS、S3、HDFS 等。8.1 配置 NFS 共享存储作为快照仓库NFS 服务端例如 server4配置# 安装 NFS 工具yuminstall-ynfs-utils# 创建共享目录mkdir-p/data/es-backupchmod777/data/es-backup/# 配置 NFS 共享vim/etc/exports在/etc/exports中添加/data/es-backup *(rw,sync,no_root_squash)启动并启用 NFS 服务systemctlenable--nownfs所有 Elasticsearch 节点server1, server2, server3配置# 安装 NFS 客户端工具yuminstall-ynfs-utils# 创建本地挂载点mkdir-p/data/es-backup# 查看 NFS 服务器共享showmount-eserver4# 挂载 NFS 共享目录mount192.168.150.163:/data/es-backup /data/es-backup# 可选将挂载写入 /etc/fstab 实现开机自动挂载echo192.168.150.163:/data/es-backup /data/es-backup nfs defaults 0 0/etc/fstab8.2 更新 Elasticsearch 配置并重启集群在每个 ES 节点的/etc/elasticsearch/elasticsearch.yml配置文件中添加path.repo:/data/es-backup滚动重启集群避免数据丢失PUT _cluster/settings{transient:{# 临时生效集群重启后失效cluster.routing.allocation.enable:primaries}}逐个重启 Elasticsearch 节点systemctl restart elasticsearch所有节点重启完成后恢复分片分配PUT _cluster/settings{transient:{cluster.routing.allocation.enable:null# 清除临时设置}}8.3 创建快照仓库通过 Kibana Dev Tools 或 curl 命令创建仓库。使用 API 创建仓库# 创建名为 my_backup 的仓库PUT /_snapshot/my_backup{type:fs,settings:{location:/data/es-backup,compress:true}}通过图形化8.4 创建快照备份所有索引PUT /_snapshot/my_backup/snapshot_all_20251026# 快照名称自定义建议含时间备份指定索引例如 syslog-*PUT /_snapshot/my_backup/snapshot_syslog_20251026{indices:syslog-*,ignore_unavailable:true,include_global_state:false}8.5 查看与管理快照列出仓库中所有快照GET /_snapshot/my_backup/_all查看单个快照详情GET /_snapshot/my_backup/snapshot_syslog_20251026监控快照进度GET /_snapshot/my_backup/snapshot_syslog_20251026/_status8.6 恢复快照恢复整个快照POST /_snapshot/my_backup/snapshot_syslog_20251026/_restore恢复指定索引并可重命名避免冲突POST /_snapshot/my_backup/snapshot_all_20251026/_restore{indices:syslog-2025.10.26,rename_pattern:syslog-(\\d),rename_replacement:restored_syslog-$1,include_global_state:false}查看恢复进度GET /_recovery删除快照DELETE /_snapshot/my_backup/snapshot_all_202510269. Elasticsearch 集群安全与监控9.1 启用 X-Pack 安全认证在 server1主节点上生成证书cd/usr/share/elasticsearch/# 生成 CAbin/elasticsearch-certutil ca# 使用 CA 生成节点证书bin/elasticsearch-certutil cert--caelastic-stack-ca.p12# 复制证书到配置目录并设置权限cpelastic-certificates.p12 /etc/elasticsearch/chownelasticsearch:elasticsearch /etc/elasticsearch/elastic-certificates.p12配置 server1 的elasticsearch.yml# 启用安全功能xpack.security.enabled:true# 启用传输层 SSLxpack.security.transport.ssl.enabled:truexpack.security.transport.ssl.verification_mode:certificatexpack.security.transport.ssl.keystore.path:/etc/elasticsearch/elastic-certificates.p12xpack.security.transport.ssl.truststore.path:/etc/elasticsearch/elastic-certificates.p12# 为 Head 插件等工具配置 CORS 头http.cors.allow-headers:Authorization,X-Requested-With,Content-Length,Content-Type重启 Elasticsearch 服务systemctl restart elasticsearch将证书分发到其他集群节点并配置# 从 server1 复制证书到 server2 和 server3scp/etc/elasticsearch/elastic-certificates.p12 server2:/etc/elasticsearch/scp/etc/elasticsearch/elastic-certificates.p12 server3:/etc/elasticsearch/在 server2 和 server3 上执行chownelasticsearch:elasticsearch /etc/elasticsearch/elastic-certificates.p12并同样在它们的elasticsearch.yml中添加上述安全配置然后重启服务。设置内置用户密码在所有节点重启成功后在任一节点如 server1执行cd/usr/share/elasticsearch/ bin/elasticsearch-setup-passwords interactive按提示为elastic、kibana、logstash_system等用户设置密码。9.2 配置其他服务使用认证Elasticsearch Head 插件访问访问地址需附带认证信息http://192.168.150.163:9100/?auth_userelasticauth_password你的密码Logstash 配置认证在 Logstash 输出配置中添加用户密码output{elasticsearch{hosts[http://192.168.150.160:9200]indexapachelog-%{YYYY.MM.dd}userelasticpassword你的密码}}/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats.confKibana 配置认证编辑/etc/kibana/kibana.ymlelasticsearch.username:kibanaelasticsearch.password:为kibana用户设置的密码重启 Kibana 服务systemctl restart kibanacerebro访问9.3 使用 Metricbeat 监控 Elasticsearch 集群在所有 ES 节点安装 Metricbeatrpm-ivhmetricbeat-7.6.1-x86_64.rpm启用 Elasticsearch 监控模块并配置cd/etc/metricbeat/modules.d metricbeat modulesenableelasticsearch-xpackvimelasticsearch-xpack.yml配置模块指定监控的 ES 节点地址。配置 Metricbeat 主文件并启动编辑/etc/metricbeat/metricbeat.yml设置输出到 Elasticsearch需配置认证或 Logstash。[rootserver1 modules.d]# cd .. [rootserver1 metricbeat]# vim metricbeat.yml [rootserver1 metricbeat]# systemctl enable --now metricbeat.servicesystemctlenable--nowmetricbeat在 Kibana 中查看监控数据以此类推配置server2server3没有任何改动最后退出设置模式
返回列表