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
>$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
*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