美文网首页网络资源
ELK-开源日志收集分析软件栈

ELK-开源日志收集分析软件栈

作者: 粉丝同学 | 来源:发表于2016-03-09 13:55 被阅读927次

    首先,日志能做什么?

    • 系统健康状况监控

    • 查找故障根源

    • 系统瓶颈诊断和调优

    • 追踪安全相关问题

    现在,如何采集日志?

    互联网大规模、分布式的特性决定了日志的源头越来越分散,产生的速度越来越快,传统的手段和工具(主要是linux grep、awk、wc等命令)显得日益力不从心。市场对新工具的需求已然催生出Splunk这样近百亿美元市值的专业日志分析解决方案供应商。然而,开源才是王道。以下是罗列的一些主流开源日志框架。(本文先整理了ELK的部分,其他开源日志框架介绍后续不定时间更新)

    • ELk(elasticsearch+logstash+kibana)

    1.官方主页:https://www.elastic.co/products

    2.开源简介:
    顾名思义,ELK是三个开源工具ElasticSearch,Logstash,Kibana组合而成的软件栈,其中的核心是开源的分布式搜索引擎Elasticsearch,辅以Logstash灵活多样的日志收集过滤传送功能以及Kibana炫酷的前端展示面板,组合成一套可以媲美商业应用的解决方案。

    • Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。

    • Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。

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

    3.架构原理
    在需要收集日志的所有服务上部署 logstash ,作为 logstash agent ( logstash shipper )用于监控并过滤收集日志,将过滤后的内容发送到 logstash indexer ,logstash indexer 将日志收集在一起交给全文搜索服务 ElasticSearch ,可以用ElasticSearch 进行自定义搜索通过 Kibana 来结合自定义搜索进行页面展示。架构图如Fig1.1所示:

    Fig 1.1 elk.png

    4.安装部署

    • JDK安装和配置(略)

    • Logstash安装

    下载并安装 Logstash ,安装 logstash 只需将它解压的对应目录即可,例如:/usr/local 下:
    <pre># tar -zxf logstash-2.2.2.tar.gz -C /usr/local/ </pre>

    安装后运行如下命令:
    <pre># cd /usr/local/logstash-2.2.2/bin

    logstash -e 'input { stdin { } } output { stdout {} }'

    Hello World!

    2016-03-07T12:46:12.095Z XiaoMeng-MacMini.local HelloWorld!

    </pre>

    我们可以看到,我们输入什么内容logstash按照某种格式输出,其中-e参数参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。使用CTRL-C命令可以退出之前运行的Logstash。

    使用-e参数在命令行中指定配置是很常用的方式,不过如果需要配置更多设置则需要很长的内容。这种情况,我们首先创建一个简单的配置文件,并且指定logstash使用这个配置文件。 例如:在 logstash 安装目录下创建一个“基本配置”测试文件 logstash-test.conf, 文件内容如下:
    <pre># cat logstash-simple.conf
    input { stdin { } }
    output {
    stdout { codec=> rubydebug }
    }</pre>

    Logstash 使用 input 和 output 定义收集日志时的输入和输出的相关配置,本例中input 定义了一个叫 "stdin" 的 input , output 定义一个叫 "stdout" 的 output 。无论我们输入什么字符, Logstash 都会按照某种格式来返回我们输入的字符,其中 output被定义为 "stdout" 并使用了 codec 参数来指定 logstash 输出格式。
    使用logstash的-f参数来读取配置文件,执行如下开始进行测试:
    <pre># logstash agent -f logstash_simple.conf Settings: Default pipeline workers: 4
    Logstash startup completed
    echo "date hello world" //命令行输入
    //测试结果
    {
    "message" => "echo "date hello world"",
    "@version" => "1",
    "@timestamp" => "2016-03-09T00:47:41.172Z",
    "host" => "XiaoMeng-MacMini.local"
    }
    </pre>

    • Elasticsearch安装和配置

    下载 Elasticsearch 后,解压到对应的目录就完成 Elasticsearch 的安装。
    <pre># tar -zxf elasticsearch-2.2.0.tar.gz -C /usr/local/</pre>
    启动Elasticsearch
    <pre># cd /usr/local/elasticsearch-2.2.0/bin
    # elasticsearch</pre>
    如果使用远程连接的 Linux 的方式并想后台运行 elasticsearch ,可以使用nohup:
    <pre># nohup /usr/local/elasticsearch-2.2.0/bin/elasticsearch > nohup &</pre>
    查看 elasticsearch 的 9200 端口是否已监听,是则说明 elasticsearch 已成功运行:
    <pre># netstat -anp |grep 9200</pre>
    接下来我们在 logstash 安装目录下创建一个用于测试 logstash 使用 elasticsearch作为 logstash 的后端的测试文件 logstash_es_simple.conf,该文件中定义了stdout和elasticsearch作为output,这样的“多重输出”即保证输出结果显示到屏幕上,同时也输出到elastisearch中。
    <pre># cat logstash_es_simple.conf
    input { stdin { } }
    output {
    elasticsearch {hosts => "localhost" }
    stdout { codec=> rubydebug }
    }</pre>
    执行如下命令:
    <pre># logstash agent -f logstash-es-simple.conf
    hello logstash//命令行输入
    //测试结果
    {
    "message" => "hello logstash",
    "@version" => "1",
    "@timestamp" => "2016-03-09T01:15:44.766Z",
    "host" => "XiaoMeng-MacMini.local"
    }
    </pre>
    接下来使用 curl 命令发送请求来查看 ES 是否接收到了数据:
    <pre># curl 'http://localhost:9200/_search?pretty'
    //测试结果
    {
    "took" : 19,
    "timed_out" : false,
    "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
    },
    "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
    "_index" : "logstash-2016.03.09",
    "_type" : "logs",
    "_id" : "AVNY8afVDB1d7fLqdOmL",
    "_score" : 1.0,
    "_source" : {
    "message" : "hello logstash",
    "@version" : "1",
    "@timestamp" : "2016-03-09T01:15:44.766Z",
    "host" : "XiaoMeng-MacMini.local"
    }
    } ]
    }
    }
    </pre>
    至此,已经成功利用 Elasticsearch 和 Logstash 来收集日志数据了。

    • elasticsearch 插件
      Elasticsearch-kopf 插件可以查询 Elasticsearch 中的数据,安装 elasticsearch-kopf,只要在你安装 Elasticsearch 的目录中执行以下命令即可:
      <pre># cd /usr/local/elasticsearch-2.2.0/bin/
      # plugin install lmenezes/elasticsearch-kopf</pre>

    安装完成后在 plugins 目录下可以看到 kopf.在浏览器访问 http://localhost:9200/_plugin/kopf 浏览保存在 Elasticsearch 中的数据,如图Fig1.2所示:

    Fig 1.2 plugins.png
    • Kibana安装

    下载 kibana 后,解压到对应的目录就完成 kibana 的安装
    <pre>tar -zxf kibana-4.4.1-linux-x64.tar.gz -C /usr/local/</pre>
    启动kibana
    <pre># cd /usr/local/kibana-4.4.1-linux-x64/bin
    # kibana</pre>
    使用 http://localhost :5601 访问 Kibana ,登录后,首先,配置一个索引,默认, Kibana 的数据被指向 Elasticsearch ,使用默认的 logstash-* 的索引名称,并且是基于时间的,点击“ Create ”即可。如图Fig1.3所示。

    Fig 1.3 kibana.png
    看到如下界面说明索引创建完成,如图Fig1.4所示。 Fig 1.4 create index.png

    点击“ Discover ”,可以搜索和浏览 Elasticsearch 中的数据,默认搜索的是最近 15分钟的数据。可以自定义选择时间。
    到此,说明简易的 ELK 平台安装部署已经完成。

    • 配置 logstash 作为 Indexer

    将 logstash 配置为索引器,并将 logstash 的日志数据存储到 Elasticsearch ,本范例主要是索引本地系统日志。
    <pre># cat /usr/local/logstash-2.2.2/bin/logstash_indexer.conf
    input {
    file {
    type =>"syslog"
    path => ["/var/log/messages", "/var/log/syslog" ]
    }
    syslog {
    type =>"syslog"
    port =>"5544"
    }
    }
    output {
    stdout { codec=> rubydebug }
    elasticsearch {hosts => "localhost" }
    }
    # cd /usr/local/logstash-2.2.2/bin/
    # logstash -f logstash_indexer.conf</pre>
    使用 echo 命令模拟写入日志,命令执行后看到如图Fig1.5所示的信息:
    <pre># echo " 'date' Jay" >> /var/log/messages</pre>
    刷新 kibana ,发现最新的测试数据显示到浏览器中,如图Fig1.6所示:

    Fig 1.6 刷新kibana.png

    到此, ELK 平台部署和基本的测试已完成。

    ---(to be continued)

    说明
    1.本文搭建平台为OSX10.10.6;
    2.elasticsearch,需要新建普通用户单独执行,不要用root执行;
    3.在logstash-2.2.2中配置elasticsearch output时,host参数改为hosts参数。具体可使用--configtest 检测配置文件是否兼容旧版的参数配置;
    4.本文所有软件配置均为官方最新版本,版本号对应文件名;

    相关文章

      网友评论

        本文标题:ELK-开源日志收集分析软件栈

        本文链接:https://www.haomeiwen.com/subject/nmtzkttx.html