构建企业级日志分析系统-ELK
一、ELK介绍
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部.
1.Elasticsearch
Elasticsearch是基于json的分布式搜索和分析引擎,专为实现水平扩展、高可靠性和管理便捷性而设计。Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。它是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
2. Logstash
Logstash是动态数据收集管道,拥有可扩展的插件生态系统,能够与Elasticsearch产生强大的协同作用。它是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
3. Kibana
Kibana能够以图表的形式呈现数据,并且具有可扩展的用户界面,供全方位配置和管理Elastic Stack。它是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
4. Beats
Beats是轻量型采集器的平台,从边缘机器向Logstash和Elasticsearch发送数据。Beats是数据采集的得力工具,将这些采集器安装在服务器中,他们就会把数据汇总到Elasticsearch。如果需要更强大的处理性能,Beats还能将数据输送到Logstash进行转换和解析。
Beats系列—全品类采集器指定所有数据类型,不同数据类型的收集使用不同的插件
5. 架构
二、实现一个基本的日志收集——收集系统日志rsyslog
1. 实现原理
1)通过rsyslog收集本机所有日志
2)filebeat拿日志给elasticsearch
3)elasticsearch分析日志
4)elasticsearch将分析结果给kibana
2. rsyslog的介绍
Linux的日志记录了用户在系统上的一切操作,看日志去分析系统的状态是运维人员必须掌握的基本功。rsyslog日志服务器的优势:1)日志统一,集中式管理;2)日志实时发送到一个更加安全的远端服务器上,真正记录用户行为,使日志的2次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。
rsyslog的新功能:rsyslog是一个加强版的syslog,具有各种各样的新功能:如,直接将日志写入到数据库;日志队列(内存队列和磁盘队列);灵活的模板机制;可以得到更多输出格式;插件式结构,多种多样的输入,输出模块;可以把日志存放在Mysql,PostgreSQL,Oracle等数据库中。
3. rsyslog配置
1)安装:
[root@web01 ~]# yum install rsyslog -y
2)配置文件
rsyslog.conf中日志规则的定义格式
facitility.priority Target
facitility:日志设备(可以理解为日志类型)
------------------------------------------------------------
auth #pam产生的日志,认证日志
authpriv #ssh,ftp等登录信息的认证信息,认证授权认证
cron #时间任务相关
kern #内核
lpr #打印
mail #邮件
-----------------------------------------------------------------
priority:级别日志级别
-----------------------------------------------------------------
debug #有调试信息的,日志信息最多
info #一般信息的日志,最常用
notice #最具有重要性的普通条件的信息
warning,warn #警告级别
err,error #错误级别,阻止某个功能或者模块不能正常工作的信息。
crit #严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert #需要立刻修改的信息
emerg,panic #内核崩溃等严重信息
------------------------------------------------------------------------------
Target:日志的处理方式
#文件 如/var/log/messages
#用户 root, *(表示所有用户)
#日志服务器 @172.16.22.1
#管道 | COMMAND
3)修改配置文件
[root@web01 ~]# vim /etc/rsyslog.conf [root@web01 ~]# grep -Ev "^$|^#" /etc/rsyslog.conf $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal
##设置服务协议和端口 $ModLoad imudp $UDPServerRun 514 $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
##收集日志的方式 *.* /var/log/testinfo.log
4)启动服务
[root@web01 ~]# systemctl start rsyslog [root@web01 ~]# systemctl status rsyslog ● rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-10-21 16:45:53 CST; 12min ago Docs: man:rsyslogd(8) http://www.rsyslog.com/doc/ Main PID: 6407 (rsyslogd) CGroup: /system.slice/rsyslog.service └─6407 /usr/sbin/rsyslogd -n Oct 21 16:45:53 web01 systemd[1]: Starting System Logging Service... Oct 21 16:45:53 web01 rsyslogd[6407]: [origin software="rsyslogd" swVersion="8.24.0-52.el7_8.2" x-pid="6407" x-info="http://ww...] start Oct 21 16:45:53 web01 systemd[1]: Started System Logging Service. Hint: Some lines were ellipsized, use -l to show in full.
5)测试
[root@web01 ~]# touch /var/log/testinfo.log [root@web01 ~]# logger "rsyslog test from info" [root@web01 ~]# grep "rsyslog test" /var/log/testinfo.log Oct 21 17:00:48 web01 root: rsyslog test from info
三、ELK安装
1. jdk安装
下载jdk的安装包,下载页面:
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
下载安装
[root@web01 tools]# ll total 20288 drwxr-xr-x 17 test test 4096 Sep 20 14:27 Python-3.5.5 -rw-r--r-- 1 root root 20766931 Jul 16 21:35 Python-3.5.5.tgz [root@web01 tools]# rz [root@web01 tools]# ll total 195556 -rw-r--r-- 1 root root 179472367 May 19 20:30 jdk-8u251-linux-x64.rpm drwxr-xr-x 17 test test 4096 Sep 20 14:27 Python-3.5.5 -rw-r--r-- 1 root root 20766931 Jul 16 21:35 Python-3.5.5.tgz [root@web01 tools]# rpm -ivh jdk-8u251-linux-x64.rpm warning: jdk-8u251-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Preparing... ################################# [100%] Updating / installing... 1:jdk1.8-2000:1.8.0_251-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar...
设置环境变量
[root@web01 ~]# vim /etc/profile [root@web01 ~]# tail /etc/profile unset i unset -f pathmunge export TMOUT=300 export HISTSIZE=1000 export HISTFILESIZE=1000 export HISTTIMEFORMAT="`whoami` %F %T" JAVA_HOME=/usr/java/jdk1.8.0_251-amd64 PATH=$JAVA_HOME/bin:$PATH:$HOME/bin CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH JAVA_HOME CLASSPATH CATALINA_HOME
生效
[root@web01 ~]# source /etc/profile
验证
[root@web01 ~]# java -version java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
2. beats日志搜集器
Beats组件:
Packetbeat(搜集网络流量数据)
Topbeat(搜集系统,进程和文件系统级别的CPU和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集Windows事件日志数据)
官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/6.x/rpm.html
软件下载:https://www.elastic.co/cn/downloads/
1)yum源设置
导入KEY文件
[root@web01 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
设置yun源
[root@web01 ~]# vim /etc/yum.repos.d/elastic.repo [root@web01 ~]# cat /etc/yum.repos.d/elastic.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
2)安装filebeat
[root@web01 ~]# yum install filebeat -y
3)配置文件
[root@web01 ~]# vim /etc/filebeat/filebeat.yml [root@web01 ~]# egrep -v "#|^$" /etc/filebeat/filebeat.yml filebeat.inputs: - type: log #类型为日志 enabled: true paths: - /var/log/testinfo.log include_lines: ['^ERR','^WARN','sshd'] #优化日志收集 filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 3 setup.kibana: output.elasticsearch: #输出 hosts: ["10.0.0.7:9200"] processors: - add_host_metadata: ~ - add_cloud_metadata: ~
4)启动filebeat
[root@web01 ~]# systemctl restart filebeat [root@web01 ~]# systemctl status filebeat.service ● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch. Loaded: loaded (/usr/lib/systemd/system/filebeat.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2020-10-21 21:28:43 CST; 4s ago Docs: https://www.elastic.co/products/beats/filebeat Main PID: 12128 (filebeat) CGroup: /system.slice/filebeat.service └─12128 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/fi... Oct 21 21:28:43 web01 systemd[1]: Started Filebeat sends log files to .... Hint: Some lines were ellipsized, use -l to show in full.
3. elasticsearch部署
1)elasticsearch安装
[root@web01 ~]# yum install -y elasticsearch
2)修改配置文件
[root@web01 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak [root@web01 ~]# vim /etc/elasticsearch/elasticsearch.yml [root@web01 ~]# egrep -v "#|^$" /etc/elasticsearch/elasticsearch.yml path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200
3)启动
[root@web01 ~]# /bin/systemctl daemon-reload [root@web01 ~]# systemctl status elasticsearch.service ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2020-10-21 21:41:49 CST; 6s ago Docs: http://www.elastic.co Main PID: 13009 (java) Tasks: 4 Memory: 498.2M CGroup: /system.slice/elasticsearch.service └─13009 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupanc... Oct 21 21:41:49 web01 systemd[1]: Started Elasticsearch.
[root@web01 ~]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6406/sshd tcp6 0 0 :::9200 :::* LISTEN 13009/java tcp6 0 0 :::9300 :::* LISTEN 13009/java tcp6 0 0 :::22 :::* LISTEN 6406/sshd udp 0 0 0.0.0.0:514 0.0.0.0:* 6596/rsyslogd udp6 0 0 :::514 :::* 6596/rsyslogd
4)测试
[root@web01 ~]# curl http://10.0.0.7:9200/ { "name" : "mQZoCGD", "cluster_name" : "elasticsearch", "cluster_uuid" : "jfrASbZhRUyXyDfE4n71rw", "version" : { "number" : "6.8.12", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "7a15d2a", "build_date" : "2020-08-12T07:27:20.804867Z", "build_snapshot" : false, "lucene_version" : "7.7.3", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
浏览器测试
4. kibana部署
1)kibana安装
[root@web01 ~]# yum install kibana -y
2)修改配置文件
[root@web01 ~]# cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak [root@web01 ~]# vim /etc/kibana/kibana.yml [root@web01 ~]# egrep -v "#|^$" /etc/kibana/kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://10.0.0.7:9200"]
3)kibana启动
[root@web01 ~]# systemctl daemon-reload [root@web01 ~]# systemctl start kibana.service [root@web01 ~]# systemctl status kibana.service ● kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2020-10-21 22:10:43 CST; 7s ago Main PID: 14739 (node) Tasks: 11 Memory: 157.5M CGroup: /system.slice/kibana.service └─14739 /usr/share/kibana/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/share/kibana/bin/../src/cli ... Oct 21 22:10:43 web01 systemd[1]: Started Kibana.
[root@web01 ~]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6406/sshd tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 14739/node tcp6 0 0 :::9200 :::* LISTEN 13009/java tcp6 0 0 :::9300 :::* LISTEN 13009/java tcp6 0 0 :::22 :::* LISTEN 6406/sshd udp 0 0 0.0.0.0:514 0.0.0.0:* 6596/rsyslogd udp6 0 0 :::514 :::* 6596/rsyslogd
4)设置kibana web页面,查看数据收集
在浏览器上输入:http://10.0.0.7:5601
测试ssh连接,查看是否有日志记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏