日志收集过滤检索框架 ELK 入门

1:为什么用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

 

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

 

一个完整的集中式日志系统,需要包含以下几个主要特点:

 

收集-能够采集多种来源的日志数据

传输-能够稳定的把日志数据传输到中央系统

存储-如何存储日志数据

分析-可以支持 UI分析

警告-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统

 

1:对于数据仓库团队来说,日志是他们要分析的信息数据来源之一;

2:对于安全团队来说,日志是他们构建安全防御与漏洞挖掘的一种特征来源和触发信号源;

3:对于应用团队来说,日志是他们了解自己的系统运行状态与排除错误的一种手段;

etc.

 

2:ELK的简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch, Logstash, Kibana ,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

 

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

 

Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

 

Kibana也是一个开源和免费的工具,Kibana可以为Logstash 和 ElasticSearch提供的日志分析友好的 Web界面,可以帮助汇总、分析和搜索重要数据日志。

 

3:ELK

ELK=elasticsearch+Logstash+kibana

elasticsearch:后台分布式存储以及全文检索

logstash:日志加工、解析、“搬运工”

kibana:数据可视化展示。

ELK架构为数据分布式存储、日志解析和可视化查询创建了一个功能强大的管理链。三者相互配合,取长补短,共同完成分布式大数据处理工作。

 

4:ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

 

5:ES优势

1)分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。

2)实时分析的分布式搜索引擎。

分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作;

负载再平衡和路由在大多数情况下自动完成。

3)可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。也可以运行在单台PC上(已测试)

4)支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。

 

6:Python使用elastic

滚屏:https://blog.csdn.net/u014431852/article/details/52830938

https://blog.csdn.net/YHYR_YCY/article/details/78882011

 

 

PS:一些elk的实现分享

1)新浪ES如何分析处理32亿条实时日志http://dockone.io/article/505

2)阿里ES构建挖财自己的日志采集和分析体系http://afoo.me/columns/tec/logging-platform-spec.html

3)有赞ES业务日志处理http://tech.youzan.com/you-zan-tong-ri-zhi-ping-tai-chu-tan/

4)ES实现站内搜索http://www.wtoutiao.com/p/13bkqiZ.html


# 参考:
# https://blog.csdn.net/YHYR_YCY/article/details/78882011

field = ["ip", "status", "uri", "http_user_agent"]

# 分析
# must 表示必须
# term 字段 此字段的status 的值必须为200
# range 表示log_time的范围,支持传入format, gte 开始时间,是一個format字符串,lt结束时间
# _source 文本查询中要查询的字段,数组形式给出
query = {
    "bool": {
        "must": [
            {
                "term": {
                    "status": 200
                }
            },
            {
                "range": {
                    "log_time": {
                        "gte": "",
                        "lt": "",
                        "format":"yyyy-MM-dd HH:mm",
                        "time_zone": "+08:00"
                    }
                }
            }
        ]
    },
    "_source": field
}

# 简单query
# query = {'query': {'range': {'age': {'gt': 11}}}}# 查找年龄大于11的所有文档
# query = {'query': {'term': {'name': 'jack'}}}# 查找名字叫做jack的所有文档


# 建立es连接
def get_conn():
    host = ""
    port = 9200
    return Elasticsearch([{"host": host, "port": port}])


# 取数据
# index 索引, size一次的大小
# scroll 记录上一次查询的位置,_scroll_id,第一次查询时已经对查询结果做了快照
def search(esp):
    es = get_conn()

    res = es.search(
        index    = esp["index"],
        size     = esp["size"],
        scroll   = esp["scroll"],
        request_timeout = esp["request_timeout"],
        body = esp["query"]
    )

    hits_size = len(res["hits"]["hits"])
    infos = res["hits"]["hits"]
    while hits_size > 0:
        infos += res["hits"]["hits"]
        sid = res["_scroll_id"]
        res = es.scroll(
            scroll_id = sid,
            scroll = esp["scroll"],
            params = {"request_timeout": esp["request_timeout"]}
        )
    return infos

参考:

https://www.cnblogs.com/aresxin/p/8035137.html

https://blog.csdn.net/laoyang360/article/details/52244917

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值