如何搭建本地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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容