分布式日志收集(ELK)

ELK简介:

ELK=Elasticsearch+ Logstash + Kibana,是同一家公司开发的3个开源工具,可组合起来搭建海量日志分析平台,目前很多公司都在使用这种方式搭建日志分析平台进行大数据分析。
在这里插入图片描述
参考:初识ES数据库


Logstash介绍:

Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
核心流程:Logstash事件处理有三个阶段:inputs→filters→outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。


传统日志收集存在的问题:

传统日志收集一般都是用log4j,slf4j,logback等一些日志插件,帮我们做日志存储并保存到本地,可配置按每天存储或指定日志文件大小等一些功能。在单体应用下这样做或许没啥问题,但是当做了集群或者是分布式系统中问题一下就暴露出来了。
例如:当系统出现异常我们需要查询某个日志时,我们需要这样做:

  1. 先定位到某个服务,确定该日志是哪个服务产生的。
  2. 由于服务做了集群会自动负载均衡,我们不知道该日志在哪个服务节点(实例)上,需要依次登录到每个节点的服务器进行排查,当服务节点很多时可想而知这样的工作量是巨大的;而且日志文件一般很大查询相率也不高。

而ELK就可以帮我们解决这个痛点,Logstath将各服务节点的日志收集起来并集中存储到ES,ES强大的搜索功能可以帮我们实现快速查询,我们只需要利用Kibana可视化界面进行查询操作即可展示结果。

ELK日志收集原理图解:

在这里插入图片描述
注:Logstash三个核心功能Input(收集读取日志)、Filter(过滤日志信息)、Output(将日志存储到ES)。
在实际应用中,还需要引入消息队列如Kafka,后面在介绍


ELK环境搭建

搭建顺序为Elasticsearch、Logstash,Kibana只是个图形化界面先搭后搭都不影响。

1. 安装ES与Kibana并启动
关于ES与Kibana的安装这里不赘述了,请参考:Elasticsearch入门(ES,Kibana可视化界面安装)

2. 安装Logstash

  • 下载安装包: wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
  • 解压:tar -zcvf logstash-6.4.3.tar.gz
  • 在Logstash的config目录下放入myservice.conf文件(见下)
  • 启动:./logstash -f myservice.conf #进入logstash的bin目录下,启动时指定配置文件

myservice.conf文件内容如下:

input{
	#从文件读取日志信息输送到控制台 path:这里测试ES的日志收集,就不单独搭建服务了
	file{
	    # 要读取的日志文件,还可以是Kafk、数据库、MongoDB、Redis...
		path => "/usr/local/elasticsearch-6.4.3/1ogs/myes.1og" 
		codec => "json"  # 以JSON格式读取日志
		type => "elasticsearch" # 索引类型,可自定义 如:order-service
		start_position=>"beginning"
	}
}
# filter{
#
# }
output{
	# 标准输出,写入ES
	# stdout{}
	# 输出进行格式化,采用Rulby库来解析日
	stdout{ codec => rubydebug }
	
	elasticsearch {
		# hosts:配置ES服务列表地址  
		hosts => ["192.168.2.101:9200"]
		#index:根据每天日期创建索引  格式:es-YYYY.MM.dd  默认索引类型:doc
		index => "es-%{+YYYY.MM.dd}"
	}
}

3. 测试是否成功
启动后我们查看到Logstash日志输出如下JSON字符串即表示成功:
在这里插入图片描述
4. 利用Kibana的DevTools进行查询(常用)
浏览器访问Kibana地址:http://192.168.2.101:5601

在这里插入图片描述
测试命令:

#### 例如今天产生的索引名为: es-2019.10.10
### 查看文档映射
GET es-2019.10.10/_mapping

### 所有字段message中匹配node-0的日志
GET es-2019.10.10/_search
{
  "query": {
    "match": {
      "message": "node-0"
    }
  }
}

5. 可视化界面查询
第一次进入Discover需先创建一个 es*,表示索引名为es开始的
在这里插入图片描述

ELK初体验就到这里了,后面将介绍ELK+Kafka实现分布式系统日志收集

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值