一、ELK 概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch 是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。 Logstash 作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。 Logstash 由JRuby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。 Kiabana 是基于 Node.js 开发的展示工具,可以为 Logstash 和 ElasticSearch 提供图形化的日志分析 Web 界面展示,可以汇总、分析和搜索重要数据日志。 Filebeat 轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。 2、为什么要使用 ELK? 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。 3、完整日志系统基本特征 收集:能够采集多种来源的日志数据 传输:能够稳定的把日志数据解析过滤并传输到存储系统 存储:存储日志数据 分析:支持 UI 分析 警告:能够提供错误报告,监控机制 4、ELK 的工作原理 (1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。 (2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。 (3)Elasticsearch 对格式化后的数据进行索引和存储。 (4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。 实验要求: es主机内存至少4个G; 103&&104 先连接103和104; 主机名进行修改,并同步会话; 关闭防火墙,和内核安全机制; 且永久关闭,基础参数设置之后可能要重启系统; 为两个主机创建运行es的程序用户; 并设置密码,方便该用户提权,且加入到wheel组; (系统内定的一个组,默认该组的成员提权有all权限;) 设置该组的成员不需要密码登录; 切换到es的用户环境下; 提权安装java-11版本的环境; 检查一下; 打开用户资源限制的文件,添加语句; 添加软限制及硬限制; 1:es用户运行的进程最多打开的文件数; 2:es用户最多打开的进程数量; 3: 对es用户内存不锁定; 修改内核参数的配置文件; 为系统提供最大的区域数量; 基本参数设置之后,重启一下系统; 重启之后再连接到es用户下; 将所需的软件包拉入进去; 103: 104: 解压:两台主机同时进行; 该包是二进制的,不需要编译等动作,只需要移动到方便管理的目录下即可; 然后进入到安装目录下的config目录,修改该文件; 内存为java虚拟机分配缓冲区的大小; 再修改这个文件;注意,该文件中的语法要求特别严格; 首先修改集群的名字和节点名字; 注意空格,不要多,也不要少; 存储数据的路径,注释符去掉,等下创建出来; 应用程序运行过程中产生的日志,而不是采集日志的路径; 物理内存的锁定改为不锁定; 修改监听的地址和端口; 列举集群中各节点的主机名称; 在该集群中要把哪个节点初始化为master; 此时104的参数已经修改完毕了,可以把会话同步关闭掉,单独配置master的参数; 103: 支持用web服务访问数据; 允许谁访问web服务提供的数据;*号通配所有; 然后再把会话同步起来,创建配置文件中指定的目录; 创建目录并且设置归属;且设置es程序所在目录的归属; 查看; 同时启动es程序,该程序启动需要一定的时间;稍后再查进程相关的信息; 注:&符为后台运行; 如果从节点一直报错,那么可能是hosts文件没修改; 再打开一个终端,写入hosts文件即可; 然后用web服务查看节点的信息; 末尾的*号在哪个节点,哪个节点就是master; 安装head插件(103) 》查看一下head包 》安装所需要的依赖环境 注释:直接安装是没有这些的,找ali的仓库 》把阿里的仓库复制进来 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum clean all 注释:直接放进去权限不够 》切换到root用户,再放进去 》上传ali仓库 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum clean all 》再切换为es用户 》安装依赖环境 》解压head的包 》切换到解压目录下 》设置国内node包的仓库 注释:npm在安装nodejs的时候也有依赖包,这个依赖包也要从网上下载; 》安装nodejs包 注释:安装的时候,需要切换的包的目录下,再安装 》启动 注释:安装、启动都需要在这个包的目录下 到这需要回车一下 注释:9100这个端口是elasticserch-head这个插件的访问端口,通过这个端口可以访问它的web界面 》查看有没有这个9100端口 》打开浏览器 注释:elk1:星号说明是master 二、logstash(102) 1、打开xshell102 2、先给logstash命名 3、关闭防火墙并设置为永久关闭 4、安装java环境 5、把logstash包上传到服务器 6、解压 7、对解压目录进行重命名 8、为data目录设置权限 9、测试安装结果 》直接将消息输出到屏幕 注意:执行该命令后稍微等一下,会出现一个消息格式,可以输入一些字符串,作为该消息的内容 退出按Ctrl+C,如果命令失败,删除logstash目录的的data子目录 例如下列显示: nihao { "@timestamp" =>2020-03-14T03:20:24.229Z, "@version" =>"1", "host" =>"elk1", "message" =>"nihao " } 》将消息输出到es(如果没有安装head组件,此步骤省去) bin/logstash -e 'input {stdin{}} output{stdout{codec=>rubydebug}} output{elasticsearch{hosts=>["192.168.10.103:9200"]}}' 稍等一下可以输入一些字符串作为消息 再打开http://192.168.10.103:9100/查看消息内容 10、logstash读取messages里面的信息 三、fliebeat(101) 1、把filebeat上传 2、把防火墙、se关闭 3、yum安装apache 4、测试页面 5、启动apache 6、测试一下 7、查看一下日志 8、解压一下filebeat 9、移动解压目录,并重命名 10、查看filebeat目录下的文件 注释:filebeat.yml是一个模板配置文件 11、移动filebeat模板配置文件,并重命名 12、重新写一个filebeat配置文件 注释:yml文件语法的严谨;两两空格 问题:假如日志文件有多个,该怎么写? 加入输出的目的地,不是一个logstash,而是一群logstash又该怎么写? 13、启动filebeat 14、jobs -l查看是否运行 四、logstash(102)----修改logstash对应的信息 1、切换到/etc/logstash/config目录下,创建一个专门处理由101filebeat发过来的日志 2、启动 注释:每一个logstash在运行的时候,都有一个独立的存放数据的目录; 两个不同的实例,不能共用同一个数据目录 五、kibana(103或104都可以)----安装在103 1、也是在es用户下运行的; 2、解压kibana 3、移动解压目录,重命名 4、检查一下归属 注释:sudo chown -R es:es /etc/kibana/是修改归属的 5、修改配置文件 6、启动 7、浏览器测试 注释:点击add 8、再次打开配置文件 9、查看进程 10、杀死进程 11、再启动 12、再用浏览器查看 注释:没有内容, 访问一下 检索的方式 2024-08-15T23:23:42 2024-08-15T23:24:42 注释:logstash也可以查询