运维必备——ELK日志分析系统(上)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 运维必备——ELK日志分析系统(上)

前些天发现了一个巨牛的人工智能学习网站,内容通俗易懂、风趣幽默,忍不住想分享一下。对人工智能感兴趣的同学可以去看看哦


点击跳转到网站。


一、ELK日志分析系统概述

(1)传统日志服务器的优点与缺点和为什么要使用ELK日志分析系统


通常来说,日志被分散的存储在各自的不同的设备上,如果说需要管理上百台机器,那么就需要使用传统的方法依次登录这上百台机器进行日志的查阅,这样会使得工作效率即繁琐且效率低下。所以就引出了把日志集中化的管理方法。


例如: 开源的syslog,将所有的日志都放在一台服务器上进行汇总。


下面就是传统日志服务器的优点和缺点:


  • 优点:

(1)提高安全性
(2)集中存放日志


  • 缺点:

因为是集中存放日志,所有说对日志的分析是比较困难的


由上得知传统日志服务器的缺点就是不方便工作人员进行日志的统计、检索,那么一般工作人员会使用grep、awk和wc等linux命令进行统计和检索,但是对于更高要求的查询、排序、统计,再加上庞大的机器数量,再让工作人员使用这种方法就显得力不从心了。


而ELK日志分析系统就完美的解决了上面的问题。它是一个开源、实时的日志分析系统。

官方网站是: https://www.elastic.co/products


(2)ELK日志分析系统日志的分类


  • 系统日志
  • 应用程序日志
  • 安全日志


日志分析是运维工程师解决系统故障,发现问题的主要手段。系统运维和开发人员可以通过日志了解服务器的软硬件信息,并且可以检查配置过程中的错误以及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时的采取措施纠正错误。


(3)ELK日志分析系统的分类


ELK日志分析系统是由三个完全开源的软件组合而成: Elasticsearch、Logstash、Kibana


——Elasticsearch:


Elasticsearch是一个开源的分布式搜索引擎, 特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 它是基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎。java开发,并且作为apache许可条款下的开放源码发布, 是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定、可靠、快速、安装使用方便。


概念:


  • 接近实时:(NRT)


Elasticsearch是一个接近实时的搜索平台,这意味着,从一个索引到一个文档直到这个文档能够被搜索到会有一个轻微的延迟(通常是一秒)


  • 集群:(cluster)


一个集群就是由一个或者多个几点组织在一起,它们共同持有整个的数据,并且一期提供索引和搜索功能。集群中会有一个节点作为主节点,这个主节点可以通过选举产生,并提供跨节点的联合索引和搜索的功能。


集群会有一个唯一性的标识名称,默认就是elasticsearch,集群的名称很重要,每个节点都是基于集群名称而加入到指定集群的,因此,必须确保在不同环境中使用不同的集群名称。


一个集群可以只有一个节点。


最好在配置elasticsearch的时候,就配置成集群模式


  • 节点:(node)


节点就是一台单一的服务器,它是集群的一部分,进行存储数据并且参与集群的索引和搜索功能。

和集群相同,节点也是通过名称来进行标识,默认是在节点启动时随机分配的字符名。也可以进行自定义,该名称用于在集群中识别服务器对应的节点,所以也很重要


  • 索引:(index)


一个索引就是一个拥有相似特征的文档的集和。

例如: 就像在网上买东西,如果要买裤子,那么你会搜索裤子,然后就会出现各式各样的关于裤子的商品,或者在网上搜索某个明星的名字,就会出现这个明星相关的信息。

在一个集群中,一个索引由一个名字来进行标识,这个名称必须全部都是小写字母,也可以自定义索引。


索引相当于关系型数据库的库


索引(库)——类型(表)——文档(数据)


  • 类型:(type)


在一个索引中,用户可以定义一种或者多种类型,一个类型是你的索引的一个逻辑上的分类分区,其语义会完全由用户来定义。

通常来说,会为具有一组共同字段的文档定义一个类型。

例如: 上面说的要买裤子,这个时候如果搜索的是牛仔裤、休闲裤,这种的,其实就是加了一个类型。


类型相当于关系型数据库的表


索引(库)——类型(表)——文档(数据)


  • 文档:(document)


一个文档是一个可以被索引的基础信息单元。

例如: 搜索牛仔裤,出来的各式各样的牛仔裤,就可以看作是一个个信息。

在一个索引和类型里面,只要用户需要,可以存储任意多的文档,但是,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和给这个文档分配一个类型


文档相当于关系型数据库的数据


索引(库)——类型(表)——文档(数据)


  • 分片和副本:(shards and replicas)


分片: 在实际情况下,索引存储的数据可能超过单个节点的硬件限制,例如:存储10亿个文档需要1tb的空间,1tb的空间可能不适合存储在单个节点的磁盘上,或者说10亿个文档在单个节点的搜索请求太慢了。而为了解决这个问题,elasticsearch提供将索引分成多个分片的功能,当在创建索引时,可以自定义想要分片的数量,每一个分片就是一个全功能的独立的索引,可以位于集群中的任何节点上。


分片的两个最主要的原因:


(1)水平分割扩展,增大存储量

(2)分布式并行跨分片操作,提高了性能和吞吐量


副本: 分布式分片的机制和搜索请求的文档如何汇总完全是由elasticsearch控制的,这些对于用户而言是透明的。为了防止网络问题和其他的各种问题在任何时候的不请自来,一些用户建议要有一个故障切换机制,来应对任何故障而导致的分片或者节点的不可用。为此,elasticsearch让用户将索引分片进行复制一份或者多分,而这个就称之为分片副本或者副本。


副本的两个最主要的原因:


(1)高可用性,以应对分片或者节点出现故障,因为这个原因,分片副本要在不同的节点上

(2)增大吞吐量,搜索可以并行在所有副本上执行


总的来说,每个索引可以被分成多个分片,一个索引也可以被复制0次(即没有复制)或者多次,一旦复制了,每个索引就有了主分片 (即作为复制源的原来的分片) 和复制分片 (即主分片的拷贝) 的分别。 (也就是 说只要索引被复制了一次,那么就会产生主分片和复制分片也就是两个分片)


分片和副本的数量可以在索引创建的时候指定,在索引创建之后,用户可以在任何时候动态的改变副本的数量,但是之后用户无法改变分片的数量。


默认情况下,Elasticsearch中的每个索引都被分片成5个主分片和1个副本,这意味着,如果用户的集群中至少有两个节点,那么你的索引将会有5个主分片和另外5个副本分片还有一个索引的完全拷贝,这样的化每个索引总共就有10个分片


——Logstash:


Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤并且将其进行存储。 它是由JRuby语言编写,基于消息(message-based)的简单架构,并且运行在java虚拟机上(即JVM),不同于分离的代理段(agent)或者主机端(server),LogStash可以配置单一的代理段(agent)于其他开源软件结合,来实现不同的功能。


其实Logstash的理念很简单,只做三件事情:


(1)Collect:数据输入

(2)Enrich:数据加工,例如:过滤、改写等

(3)Transport:数据输出


别看Logstash只做三件事情,但是通过组合输入和输出,可以变化出多种架构从而实现各种需求。


Logstash主要组件:


  • Shipper:


日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可


  • Indexer:


日志存储者,负责接收日志并且写入到本地文件


  • Broker:


日志Hub(中心转发器), 负责连接多个Shipper和多个Indexer


  • Search and Storage:


运行对事件进行搜索和存储


  • Web Interface:


基于Web的展示界面


正因为上面的组件在Logstash架构中可以独立部署,才提供了更好的集群扩展性


Logstash主机分类


代理主机(agent host):


作为事件的传递着(Shipper),将各种日志数据发送至中心主机,只需要运行logstash代理程序(agent)


中心主机(central host):


可以运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web interface)在内的各个组件,以实现对日志数据的接收、处理和存储。


——Kibana:


Kiabna是一个完全开源的工具,它可以为Logstash和Elasticsearch提供可视化的web界面。 并且可以帮助用户进行汇总、分析和搜索重要的数据日志。使用Kibana,可以通过各种图表进行高级数据分析以及展示。它让海量数据更容易理解,操作简单,基于浏览器的用户界面可以快速创建仪表盘(dashboard,一种图表)实时显示Elasticsearch查询动态。设置Kibana非常简单,无需编写代码,几分钟之内就可以完成Kibana的安装并且启动Elasticsearch索引监测。


Kibana主要功能:


Elasticsearch无缝之集成:


Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。它还充分利用了Elasticsearch强大的搜索和分析功能


整合数据:


Kibana能够更好的处理海量的数据,并且创建柱形图、折线图、直方图等各种图表


复杂数据分析:


Kibana提升了Elasticsearch的分析能力,能够更加智能的分析数据,执行数学转换并且根据要求对数据切割分块


让更多团队成员收益:


强大的数据库可视化接口让各个业务岗位都能够从数据集和中收益


接口灵活,分享更容易:


使用Kibana可以更加方便的创建、保存、分享数据,并且将可视化数据进行快速交流


配置简单,可视化多数据源:


KIbana可以非常方便的把来自Logstash、ES-Hadoop、Beats或者第三方技术的数据整合到Elasticsearch,支持的第三方技术包括apache flume、fluentd等


简单数据导出:


Kibana可以方便的导出用户感兴趣的数据,并且与其他数据集和、融合后快速建模分析,发现新结果


(4)日志处理的步骤


Logstash收集AppServer产生的log,并且存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据并且生成图表,再返回给Browser。总的来说,整个的过程需要进行以下几个步骤:


(1)将日志进行集中化管理

(2)将日志格式化(Logstash)并且输出到Elasticsearch

(3)对格式化后的数据进行索引和存储(Elasticsearch)

(4)前端数据的展示(Kibana)


20210330091831535.png


二、部署ELK日志分析系统


(1)实验环境


本次实验全部采用centos7.*系统


主机名称 ip地址 扮演角色 内存
node1 192.1683.100.1 node节点 >=2G建议4G
node2 192.168.100.2 node节点 >=2G建议4G



node1部署:


(1)elasticsearch:端口 9200

(2)elasticsearch——head插件:端口 9100

(2)Kibana 日志分析平台: 端口 5601


node部署:


(1)elasticsearch:端口 9200

(2)logstash——日志采集


(2)实验目的


  • 配置ELK日志分析集群
  • 使用logstash收集日志
  • 使用Kibana查看分析日志


(3)实验步骤


1、node1配置

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname node1
[root@Centos7 ~]# su
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
setenforce: SELinux is disabled
[root@node1 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)添加地址到hosts文件,可以解析elk-2主机
[root@node1 ~]# echo '192.168.100.1 elk-1' >> /etc/hosts
[root@node1 ~]# echo '192.168.100.2 elk-2' >> /etc/hosts
[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.1 node1
192.168.100.2 node2
[root@node1 ~]# bash  (换一个bash环境更新配置)

2、node2配置

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname node2
[root@Centos7 ~]# su
[root@node2 ~]# systemctl stop firewalld
[root@noded2 ~]# setenforce 0
setenforce: SELinux is disabled
[root@node2 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)添加地址到hosts文件,可以解析elk-1主机
[root@node2 ~]# echo '192.168.100.1 node1' >> /etc/hosts
[root@node2 ~]# echo '192.168.100.2 node2' >> /etc/hosts
[root@node2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.1 node1
192.168.100.2 node2
[root@node2 ~]# bash

3、node1和node2共同配置

******(1)安装java环境
[root@node1 ~]# yum -y install java
。。。。。。
完毕!
[root@node1 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
******(2)上传软件包并且安装
[root@node1 ~]# ll
总用量 69660
-rw-------. 1 root root     1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 33396354 3月  30 22:08 elasticsearch-5.5.0.rpm
-rw-r--r--  1 root root 37926436 3月  30 22:08 elasticsearch-head.tar.gz
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm  (使用rpm安装)
。。。。。。
******(3)加载系统服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
******(4)更改主配置文件
[root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak (先做一个备份)
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
。。。。。。
16 #
17 cluster.name: my-elk-cluster    #集群名称
18 #
。。。。。。
22 #
23 node.name: node1                #节点服务器名称,node2写node2即可
24 #
。。。。。。
32 #
33 path.data: /data/elk_data       #数据存放路径
34 #
。。。。。。
36 #
37 path.logs: /var/log/elasticsearch/ #日志存放路径
38 #
。。。。。。
42 #
43 bootstrap.memory_lock: false       #在启动时不锁定内存
44 #
。。。。。。
54 #
55 network.host: 0.0.0.0              #提供服务绑定的ip地址,0.0.0.0表示所有地址
56 #
。。。。。。
58 #
59 http.port: 9200                    #侦听端口
60 #
。。。。。。
67 #
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]  #集群发现通过单播传输实现
69 #
保存退出
******(5)利用scp传输到node2主机,修改部分内容即可
[root@node1 ~]# scp /etc/elasticsearch/elasticsearch.yml root@192.168.100.2:/etc/elasticsearch/elasticsearch.yml
The authenticity of host '192.168.100.2 (192.168.100.2)' can't be established.
ECDSA key fingerprint is SHA256:VhTZ5YxS5af2rHtfCvyc6ehXh3PD2A8KY2MyE6rHjiU.
ECDSA key fingerprint is MD5:e8:41:d2:8a:7e:e9:a9:47:a3:f0:29:be:e9:6d:df:51.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.2' (ECDSA) to the list of known hosts.
root@192.168.100.2's password: 
elasticsearch.yml                100% 2853     3.7MB/s   00:00   
******(6)创建数据存放路径并且授权
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data/
******(7)启动elasticsearch并且查看是否成功开启
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      15622/java       

现在就可以使用客户机先验证一下,访问:http://192.168.100.1:9200


20210330145308893.png


查看集群的健康状态,显示:status:‘green’ 则节点健康运行,访问:http://192.168.100.1:9200/_cluster/health?pretty


20210330150441218.png


查看集群状态信息,访问:http://192.168.100.1:9200/_cluster/state?pretty

20210330150603232.png

因为这种查看方式及其不方便,所以可以考虑安装elasticsearch-head插件,方便管理集群



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12天前
|
运维 Kubernetes 监控
构建高效自动化运维系统:基于容器技术的策略与实践
【4月更文挑战第19天】随着云计算和微服务架构的兴起,传统的运维模式正逐渐向自动化、智能化转型。本文将探讨如何利用容器技术构建一个高效、可靠的自动化运维系统,涵盖系统设计原则、关键技术选型以及实践经验分享。通过引入容器技术,我们可以实现应用的快速部署、弹性伸缩和故障自愈,从而提高运维效率,降低系统维护成本。
|
1月前
|
机器学习/深度学习 运维 监控
智能监控系统在运维中的应用与优势
传统的运维管理方式在面对日益复杂的IT系统时显得力不从心,智能监控系统的出现为运维工作带来了新的机遇。本文将探讨智能监控系统在运维中的应用与优势,介绍其工作原理以及如何有效地利用智能监控系统提升运维效率和质量。
51 2
|
2月前
|
运维 监控 安全
现代化运维管理系统的关键特征与实践指南
在当今数字化时代,现代化运维管理系统正日益成为企业提升效率、降低成本的关键工具。本文将深入探讨现代化运维管理系统的关键特征,以及实践指南,帮助企业更好地应对技术挑战,提升运维效率。
|
2月前
|
人工智能 运维 监控
现代化运维管理系统的关键性作用与挑战
随着信息技术的快速发展,现代化运维管理系统在企业中扮演着越来越重要的角色。本文将探讨现代化运维管理系统的关键作用和面临的挑战,帮助读者深入了解该领域的发展趋势。
|
2月前
|
人工智能 运维 监控
现代化运维系统的关键技术与挑战
随着信息技术的快速发展,现代化运维系统成为企业管理的重要组成部分。本文将探讨现代化运维系统中的关键技术和面临的挑战,从自动化运维、容器化技术到监控与安全性等方面展开讨论,帮助读者更好地理解和应对运维领域的挑战。
|
2月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
31 0
|
2天前
|
运维 监控 安全
构建高效自动化运维系统:策略与实践
【4月更文挑战第29天】 在信息技术日新月异的今天,高效的运维管理已成为企业保持竞争力的关键因素。本文将探讨如何构建一个能够适应快速变化需求的自动化运维系统。通过深入分析自动化工具的选择、配置管理的最佳实践以及持续集成和部署的策略,我们旨在为读者提供一个清晰的框架来优化他们的运维流程。文章的核心在于提出一种结合了最新技术和思维模式的综合解决方案,以实现运维工作的最优化。
|
2月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
3天前
|
机器学习/深度学习 人工智能 运维
构建高效自动化运维系统的策略与实践
【4月更文挑战第29天】 在数字化转型的浪潮中,企业IT基础设施变得日益复杂多变。传统的手动运维方式已无法满足快速响应和高效率的需求。本文将探讨如何通过一系列策略和技术手段构建一个高效的自动化运维系统。首先,分析当前自动化运维的必要性及其带来的益处;接着,详细阐述自动化运维的核心组件、工具选择以及实施步骤;最后,通过案例分析展示自动化运维在实际环境中的应用效果,并讨论面临的挑战及未来发展趋势。
|
3天前
|
消息中间件 运维 监控
基于SaaS云部署、云计算的区域医院云HIS系统源码(运维管理+运营管理+综合监管)
医院云his系统采用主流成熟技术开发,B/S架构,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问,前后端分离,多服务协同,服务可拆分,功能易扩展。多医院统一登录患者主索引建立、主数据管理,统一对外接口管理。
19 1