飞道的博客

Linux运维番外篇 高效且清晰的日志分析系统--ELK日志系统

460人阅读  评论(0)

一、ELK日志分析系统的概念

组成

elk系统由三部分组成
Elasticsearch:提供了一个分布式多用户能力的全文搜索引擎
Logstash:一款强大的数据处理工具
Kibana:针对Elasticsearch的开源分析及可视化平台

优缺点

优点
提高安全性
集中化管理
缺点
日志分析困难

日志的处理过程

将日志进行集中化管理(beats)其中包含四个服务
Packetbeat(搜集网络流量数据)
Topbeat(搜集系统、进程和文件系统级别的CPU和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集Windows事件日志数据)
将日志格式化(Logstash)并输出到Elasticsearch
对格式化后的数据进行索引和存储(Elasticsearch)
前端数据的展示(Kibana)

二、ELK组件和各自的特性

1.Elasticsearch五个特性

接近实时

Elasticsearch在文件搜索上速度接近实时 用索引来搜索一个文件大约只有1秒的延迟 类似于一个数据库

集群

集群由一个或者多个节点组成 所有从beast收集数据都汇总在这里 并提供索引和搜索功能
有一个主节点 通过选取产生 可以跨节点来联合搜索和索引
集群名是一个唯一的标识符 默认是Elasticsearch,节点通过不同的主机名加入集群 不同的环境要使用不同的集群名
在集群中每个节点有不同的主机民 通过不同的主机名来区分 不可以有相同的主机名 主机名在集群中为节点的唯一身份标识

节点

单台服务器组成一个节点 用来存储数据并提供索引的检索 节点也是通过主机名来进行标识 不可以重复,默认是在节点启动时随机分配的字符名。也可自己定义 名字对应节点
节点通过指定集群名来加入集群 如果集群名为默认的 在几个节点搭建成后 可以发现对方的时候 可以自行搭建集群

索引

用来检索数据 一个索引可以找到若干个数据
索引名由小写字母组成 在对一个特定的数据进行索引时需要用这个索引来搜索

文档

存储数据的基本单位 可以被索引检索到
在一个index和type中 可以创建任意个文档来存数据 位置位于一个索引的物理位置上 要分配一个类型 这样才可以被索引

分片和副本

实际情况下,索引存储的数据可能超过单个节点的硬件限制。为了解决这个问题,Elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要的分片数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
分片的主要原因:
水平分割扩展,增大存储量
分布式并跨越分片操作,提高性能和吞吐量
分布式分片机制和搜索请求的文档如何火鬃完全是由Elasticsearch控制的,这些对用户是完全透明的。
为了健壮性,建议有一个故障切换机制,为此,Elasticsearch让我们将索引分片复制一份或多份,称之为分片副本
分片副本的原因:
高可用性,以应对分片或者节点故障。处于这个原因,分片副本要在不同的节点上
增大吞吐量,搜索可以并行在所有副本上执行
总之,每个索引可以被分成多个分片。一个索引可以被复制0次或者多次。一旦复制了,每个索引就有了主分片 (作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在指定任何时候动态的改变副本的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外的5个副本分片(一个完全拷贝),这样的话每个索引总共有10个分片。

和数据库的类似概念

Elasticsearch和数据库中的一些概念有些类似

2 Logstash

Logstash由JRuby语言编写,基于meassage-based架构,运行在jvm虚拟机上,Logstash可配置单一的代理端与其他开源软件结合,以实现不同的功能。

插件

input:收集源数据(访问日志、错误日志等)
Filter Plugin:用于过滤日志和格式处理
Output:输出日志

主要组件

Shipper(日志收集):负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
Indexer(日志存储):负责接收日志并写入到本地文件
Broker(日志Hub):负责连接多个Shipper和多个Indexer
Search and Storage:允许对事件进行搜索和存储
Web Interface:基于Web的展示界面

主机分类

代理主机是将从beats收集的数据发送至中心服务器处理 只需要运行代理程序
中心主机可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储

3 kibana

一款可以将Elasticsearch数据进行可视化操作的工具 用浏览器进行查看软件
主要特点
与Elasticsearch无缝衔接
整合数据
对复杂的数据进行分析
可以让各个成员得到数据
api灵活 可以进行分享
配置简单
对数据进行可视化操作
数据的导出和导入

三 部署ELK系统

架构图

2台节点都要执行以下操作

systemctl stop firewalld  关闭防火墙
setenforce 0  
#修改各个节点的主机名
hostnamectl set-hostname node1
su -
hostnamectl set-hostname node2
su -
hostnamectl set-hostname web
su -
#安装jdk环境
yum -y install java-1.8.0-openjdk*
#映射主机地址
echo '192.168.30.6 node1' >> /etc/hosts
echo '192.168.30.20 node2' >> /etc/hosts
#安装elasticsearch包
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
#配置
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml  修改配置文件
grep -v "^#" /etc/elasticsearch/elasticsearch.yml 查看已经修改的项
mkdir -p /data/elk_data  递归创建文件夹
chown elasticsearch:elasticsearch /data/elk_data/  修改文件属主和属组
systemctl start elasticsearch  开启服务
netstat -antp |grep 9200  检测端口  要等20秒左右





检查节点

浏览器检查节点  检查节点状态和健康状态
192.168.30.6:9200
192.168.30.20:9200
http://192.168.30.6:9200/_cluster/health?pretty
http://192.168.30.20:9200/_cluster/health?pretty
http://192.168.30.6:9200/_cluster/state?pretty
http://192.168.30.20:9200/_cluster/state?pretty






安装 elasticsearch-head 插件

yum -y install gcc gcc-c++ make 

cd /opt/elk
tar xzvf node-v8.2.1.tar.gz -C /opt
cd /opt/node-v8.2.1/
./configure 
make -j3 && make install

cd /usr/local/src/
tar xzvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install

vi /etc/elasticsearch/elasticsearch.yml
==末行插入==
http.cors.enabled: true			#开启跨域访问支持,默认false
http.cors.allow-origin: "*"		#跨域访问允许的域名地址

systemctl restart elasticsearch

cd /usr/local/src/elasticsearch-head/
npm run start &					#切换到后台运行

netstat -lnupt |grep 9100
netstat -lnupt |grep 9200


#windows验证
http://192.168.184.10:9100 
http://192.168.184.20:9100 
群集为绿色

#node1建立索引,类型为test
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"ljm","mesg":"If you want to succeed, depend on yourself"}'






安装 logstash (提供web服务那台)

将日志输入到elasticsearch中去

cd /opt
#将软件包传至本目录下
rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service
systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#建立软连接,方便系统识别

#做对接测试 logstash(Apache)与 elasticsearch(node)功能是否正常

Logstash [选项] [对象]
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串 该字符串可以被当做logstash的配置(如果是" ",则默认使用stdin作为输入、stdout作为输出)
-t:测试配置文件是否正确,然后退出


输入采用标准输入,输出采用标准输出
logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com		    #输入内容
www.sina.com。cn		#输入内容

#使用 rubydebug 显示详细输出,codec 为一种编解码器

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

www.baidu.com		#输入内容
www.sina.com.cn	    #输入内容
#使用logstash将信息写入elasticsearch输入,输出 对接
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.0.10:9200"] } }'

使用宿主机浏览 http://192.168.0.10:9100/ ,查看索引信息
使用宿主机浏览 http://192.168.0.20:9100/ ,查看索引信息

和kibana对接api

chmod o+r /var/log/messages
ll /var/log/messages


配置文件中定义的是收集系统日志(system)

vim /etc/logstash/conf.d/system.conf
input {
   
		file{
   
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
			}
		}

output {
   
        elasticsearch {
   
          hosts => ["192.168.30.6:9200"]
          index => "system-%{+YYYY.MM.dd}"
					  }
       }

systemctl restart logstash.service


测试登录192.168.0.10:9100,连接192.168.0.10:9200 查看是否有system的索引

安装kibana

cd /usr/local/src/
#将软件包传至本目录下
rpm -ivh kibana-5.5.1-x86_64.rpm

cd /etc/kibana/
cp kibana.yml kibana.yml.bak

vim kibana.yml
//2行	server.port: 5601                					#kibana打开的端口
//7行	server.host: "0.0.0.0"           					#kibana侦听的地址
//21行	elasticsearch.url: "http://192.168.30.6:9200"		#和elasticsearch建立联系
//30行	kibana.index: ".kibana"								#在elasticsearch中添加.kibana索引


systemctl start kibana.service
systemctl enable kibana.service


对接HTTP日志

Apache(192.168.0.30):

cd /etc/logstash/conf.d/
touch apache_log.conf

vim apache_log.conf
input {
   
       file{
   
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
   
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      }
output {
   
        if [type] == "access" {
   
        elasticsearch {
   
          hosts => ["192.168.30.6:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
   
        elasticsearch {
   
          hosts => ["192.168.0.10:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

# 指定文件测试
/usr/share/logstash/bin/logstash -f apache_log.conf 


转载:https://blog.csdn.net/weixin_49172531/article/details/116666943
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场