如何搭建本地ELK日志分析系统

 ELK

ELK名词解释:elastic search  & logstash & kibana

logstash是数据收集引擎,通常和kibana和ElasticSearch一起使用的;

Elasticsearch 是全文搜索引擎,可以快速的存储、搜索和分析海量数据

而kibana是专为Elasticsearch设计开发的,可提供数据查询可视化的功能

 第一部分:本地搭建ELK日志分析系统

1、下载与安装

https://www.elastic.co/cn/

2、启动

启动命令:

$bin/elasticsearch  (本地需要先配置好Java环境变量才可运行)

成功启动成功之后的界面:

默认为localhost:9200

另一个终端窗口:

$curl http://localhost:9200

或者:

$curl http://localhost:9200 -u elastic

* 用户名为:elastic

* 密码为:changeme


// 本地启动多个node节点

$bin/elasticsearch -Ehttp.port=7200 -Epath.data=node3

$bin/elasticsearch -Ehttp.port=7200 -Epath.data=node3

一个 Elasticsearch 集群中一般拥有三种角色的节点,master、data 和 client。

* master:master 节点负责一些轻量级的集群操作,比如创建、删除数据索引、跟踪记录集群中节点的状态、决定数据分片(shards)在 data 节点之间的分布;

* data:data 节点上保存了数据分片。它负责数据相关操作,比如分片的 CRUD,以及搜索和整合操作。这些操作都比较消耗 CPU、内存和 I/O 资源;

* client:client 节点起到路由请求的作用,实际上可以看做负载均衡器。

配置文件中有两个与集群相关的配置:

* node.master:默认 true。True 表示该节点是 master 节点;

* node.data:默认 true。True 表示该节点时 data 节点。如果两个值都为 false,表示是 client 节点。

(===因为本地操作需要开多个窗口启动,启动速度较慢,因为只用一个单节点模式演示===)

通过命令行curl或者web查看已启动的ES节点:

127.0.0.1:8200/_cat/nodes?v

127.0.0.1:8200/_cluster/stats

3、配置文件

config/

├── elasticsearch.yml # 基本配置

├── jvm.options # java虚拟机的相关配置

└── log4j2.properties # 日志相关配置

1、elasticsearch.yml  es的相关配置

cluster.name (http://cluster.name/) 集群名称,作为是否为同一集群的判断条件

node.name (http://node.name/) 节点名称,作为集群中不同节点的区分条件

network.host/http.port 网络地址和端口

path.data数据存储地址

path.log 日志存储地址

2、jvm.options  jvm 的相关参数 (内存大小)-Xms2g 可以改成256M

3、log4j2.properties 日志相关配置

4、ES模式:

development

production

## 二、kibana

JavaScript编写,为ES提供分析和可视化的web平台,在ES的索引中查找,交互数据并生成各种维度的表图

1、下载与安装

>https://www.elastic.co (https://www.elastic.co/cn/downloads/kibana)

2、启动

>$vim config/kibana.yaml


Set elasticsearch.hosts


>$bin/kibana

启动成功后


启动成功

用web访问:http://localhost:5601 (http://localhost:5601/)

连接本地ES的kibana工具已启动

3、kibana配置文件

server.host/server.port 访问kibana用的地址和端口

elasticsearch.url 待访问elasticsearch的地址

4、Nginx代理

为了能够让外部使用,此处用Nginx做一层代理转发

*4.1、查看本机IP*

>$ ifconfig en0


本机IP


*4.2、Nginx配置*

nginx路径:

/usr/local/etc/nginx

nginx log路径:

/usr/local/var/log/nginx/

$ cd /usr/local/etc/nginx

$ vim nginx.conf

$ nginx -t

$ nginx


*4.3、代理之后访问kibana*

http://10.23.171.11 (http://10.23.171.11/)

5、kibana常用功能

discover 数据搜索查看

visualize 图表制作

Dashboard 仪表盘制作

Timelion 时序数据的高级可视化分析

DevTools 开发者工具

management 配置管理

6、常用术语

Document 文档数据

*index* 索引

type 索引中的数据类型

field 字段,文档的属性

Query DSL 查询语法

## 三、kibana中对ES操作

1、create

demo

POST  /accounts[index]/person[type]/1 [id] --document

{

"name":"john", --field

"lastname":"doe",

"job_description":"test"

}

2、read

GET /[index]/[type]/[id]

3、update

POST /[index]/[type]/[id]/_update

4、delete

DELETE /[index]/[type]/[id]

从kibana 的dev tools窗口执行上述demo ,可以得到结果:


5、ES Query

5.1 query string

GET  /test1/axw/_search?q=update_iPhone

5.2 query DSL  --以json构建查询条件

GET  /test1/axw/_search

{

    "query":{

    "match":{

        "os":"Android"

        }

    }

}


或者

GET  /test1/axw/_search

{

    "query":{

    "term":{

        "_id":{

        "value":"02"

        }

        }

    }

}


6、discover查询

成功创建数据之后,通过创建index索引,从discover中查询

进入kibana的management菜单,选择index_patterns---->create index pattern


成功创建完index之后,就可在kibana的discover中通过选择对应的index和search搜索条件进行查询:



四、logstash

1、下载和安装

https://www.elastic.co/downloads/logstash

2、启动

$ bin/logstash

3、接入数据

        之前,我们是通过kibana直接对ES写入数据,现在,我们通过logstash将本地Nginx的acess.log日志写入到ES中,通过kibana进行数据查询。

*3.1 修改logstash的配置文件*

logstash会按照path.config: "/tmp/logstash/*.config"配置文件去执行数据搜集

我们在logstash目录下新建一个first-pipline.conf的配置文件

logstash 组成:

inputs 从各种地方获取各种数据

filters 过滤处理获取到的数据

outputs 处理完的数据输出到指定地方 (消息队列,或者ES中)

input {

  file {

    path => "/usr/local/var/log/nginx/access.log"  --本地Nginx的access.log日志文件

    start_position => "beginning"

    type => "nginx"

  }

}

filter {

    grok {    --使用 grok正则匹配把非结构化的日志数据解析成可查询的结构化数据

        match => { "message" => "%{COMBINEDAPACHELOG}"}

    }

    geoip {

        source => "clientip"

    }

}

output {

    #stdout { codec => rubydebug }

    elasticsearch {

        hosts => ["127.0.0.1:9200"]        --写入到ES的地址

        user => "elastic"

        password => "changeme"

  }

}

3.2 测试配置文件是否可执行

bin/logstash -f first-pipline.conf --config.test_and_exit

测试通过后的界面:


3.2 按照配置的参数执行

bin/logstash -f first-pipline.conf --config.reload.automatic

启动成功:


以上我们完成了从logstash收集Nginx的log,写入到ElasticSearch中,从kibana图形化的查看数据,关于kibana的使用方式在下面第二部分介绍。

# 第二部分:线上kibana图形化工具使用

1、Dicover 

Discover :所选择的索引进行匹配查询,可以保存当前查询结果,添加自定义过滤器

1、Time Filter

2、简单文本搜索,比如:Chrome ;特定字段搜索,比如:response:200; 范围查询:[START_VALUE TO END_VALUE]

复杂搜索:AND, OR, 和 NOT

比如:在nginx-*索引下搜索访问首页的安卓客户端:

request:"/api/store/hf" AND useragent.os_name:"Android"

3、保存搜索 并命名 (后续搜索可直接打开之前保存好的查询条件)

2、visualize

图表分析, 创建各种视图,比如:FLS_QPS_transaction_cart

更多视图分析,可参考文档:https://www.elastic.co/guide/cn/kibana/current/xy-chart.html


3、dashboard

各种视图的组合呈现画板,根据实际需要创建

4、实际应用

1、查看某个API访问异常:



2、创建检测看板dashboard


====Nginx中的request_time是指:从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。下图这个点表示,在14:26:40时间点99%的请求时间接近0.4s ====



先创建单个分析数据的visualize,再聚合成一个自己的dashboard

例如:dashboard name :FLS-banner  FLS-QPS-LimitBuy  FLS-QPS-member



3、线上问题查看

比如,查询某个用户一段时间内的访问路径

request:"*sid=session.1562211163737490384378"

操作姿势:


==============================分隔符================================================

参考文档:

1、https://weizhimiao.github.io/2017/04/23/%E5%88%A9%E7%94%A8ELK%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9F/

2、https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/index.html

3、https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html

4、ELKstack中文指南

https://elkguide.elasticsearch.cn/

5、kibana中文版使用手册:https://www.elastic.co/guide/cn/kibana/current/index.html

你可能感兴趣的:(如何搭建本地ELK日志分析系统)