【Elastic (ELK) Stack 实战教程】09、Kibana 分析站点业务日志
标签: 【Elastic (ELK) Stack 实战教程】09、Kibana 分析站点业务日志
2023-04-07 18:23:15 260浏览
目录
一、kibana 数据展示概述
1.1 Kibana 基本介绍
Kibana 是用来数据展示、数据分析、数据探索的 web UI 工具。
1.2 Kibana 部署架构
kibana 线上部署的推荐架构,专门部署一个 coordinating only ES Node 和 Kibana 在同台机器上。
二、Kibana 展示业务日志
2.1 日志分析介绍
需要分析的日志如下:
119.41.91.224 - - [10/Nov/2020:00:01:03 +0800] "POST /api3/appover HTTP/1.1" 200 103 "www.oldxu.com" "-" code=B177478D-4FC9-4EFC-8E4E-ED92DDE469D4&time=93966&token=2f3a5e453023d284197e238283b6947a&uid=4280691 "imoocForiPad/2.0.3 (iPad; iOS 10.0.1; Scale/2.00)" "-" 10.100.136.64:80 200 0.008 0.008
2.2 两个维度分析日志
2.2.1 Nginx 访问分析
-
访问人数?流量?
-
访问来源分布、访问站点分布、访问页面排名
-
请求响应时间分布
-
请求响应码分布
-
访问地图分布
2.2.2 网站业务数据分析
-
访问量最大的是视频还是文章
-
最受欢迎视频、文章有哪些
-
最努力的用户是谁
-
兴趣最广泛的用户数是
-
用户哪个时间段最活跃
2.3 日志分析架构图
2.4 日志分析案例实战
2.4.1 配置 Filebeat
配 filebeat --> Logstash
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的类型
enabled: true # 启用日志收集
paths:
- /var/log/nginx/access.log # 日志所在路径
tags: ["access"]
- type: log # 收集日志的类型
enabled: true # 启用日志收集
paths:
- /var/log/nginx/error.log # 日志所在路径
tags: ["error"]
output.logstash: # 输出日志到logstash
hosts: ["192.168.170.132:5044"] # logstash 所在节点IP
[root@se-node3 ~]# systemctl restart filebeat.service
2.4.2 配置 Logstash
配置 Logstash --> Elasticsearch
[root@es-node1 ~]# vim /etc/logstash/conf.d/test6.conf
input {
beats {
port => 5044
}
}
filter {
if "access" in [tags][0] {
grok {
match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:hostname} (?:%{QS:referrer}|-) (?:%{NOTSPACE:post_args}|-) %{QS:useragent} (?:%{QS:x_forward_for}|-) (?:%{URIHOST:upstream_host}|-) (?:%{NUMBER:upstream_response_code}|-) (?:%{NUMBER:upstream_response_time}|-) (?:%{NUMBER:response_time}|-)" }
}
useragent {
source => "useragent"
target => "useragent"
}
geoip {
source => "clientip"
}
date {
match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
mutate {
convert => ["bytes","integer"]
remove_field => ["message"]
add_field => { "target_index" => "app-logstash-nginx-access-%{+YYYY.MM.dd}" }
}
# 提取 referrer 具体的域名 /^"http/
if [referrer] =~ /^"http/ {
grok {
match => { "referrer" => '%{URIPROTO}://%{URIHOST:referrer_host}' }
}
}
# 提取用户请求资源类型以及资源 ID 编号
if "sky.com" in [referrer_host] {
grok {
match => { "referrer" => '%{URIPROTO}://%{URIHOST}/(%{NOTSPACE:sky_type}/%{NOTSPACE:sky_res_id})?"' }
}
}
}
else if "error" in [tags][0] {
date {
match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
mutate {
add_field => { "target_index" => "app-logstash-nginx-error-%{+YYYY.MM.dd}" }
}
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["192.168.170.132:9200","192.168.170.133:9200","192.168.170.134:9200"]
index => "%{[target_index]}"
template_overwrite => true
}
}
[root@es-node1 ~]# logstash -f /etc/logstash/conf.d/test6.conf -r
2.5 配置 kibana
2.5.1 创建 kibana 索引
app-logstash-nginx-access*:
2.5.2 统计网站总 PV、独立 IP 个数 (指标)
2.5.3 统计网站的总流量(指标图)
2.5.4 统计访问 IP Top10(水平条形图)
2.5.5 统计来源的 refrer(标签云)
2.5.6 统计访问状态码、客户端设备(饼图时序图)
2.6 图形汇聚
三、Kibana 安全访问控制
默认情况下,kibana 可以直接通过浏览器打开进行操作,这样的话任何人都可以通过该方式打开,极其的不安全,我们可以通过如下两种方式来实现访问控制:
-
nginx+kibana 非常简单实现的方式;
-
kibana roles 比较推荐的方式。
3.1 基于 Nginx 访问控制
3.1.1 安装 Nginx 服务
[root@se-node3 ~]# yum install -y nginx
[root@se-node3 ~]# yum install -y httpd-tools
# 生成密码文件
[root@se-node3 ~]# htpasswd -c -b /etc/nginx/auth_conf sky 123456
3.1.2 配置 Nginx 反向代理,以及端口隐藏
[root@se-node3 ~]# vim /etc/nginx/conf.d/kibana.sky.com.conf
server {
listen 80;
server_name kibana.oldxu.com;
auth_basic "closed site";
auth_basic_user_file /etc/nginx/auth_conf;
location / {
proxy_pass http://192.168.170.133:5601$request_uri;
}
}
[root@se-node3 ~]# systemctl restart nginx.service
3.1.3 浏览器访问
在浏览器访问 nginx 节点 ip 地址:192.168.170.134
输入刚刚创建的用户名和密码即可访问成功。
使用 Nginx 虽然解决了访问控制,但还是无法限制用户的权限。
3.2 基于 RBAC 访问控制
从 Elastic stack 6.8 和 7.1 开始,在默认分发包中免费提供多项安全功能,例如 TLS 加密通信、基于角色的访问控制 RBAC 等等。
参考官方文档:通过 TLS 加密和基于角色的访问控制确保 Elasticsearch 的安全 | Elastic Blog
注意:这里我们先给虚机做个快照,后续实验我们将不会用到 RBAC。
3.2.1 启用 Elastic TLS
[root@es-node1 ~]# /usr/share/elasticsearch/bin/elasticsearch-certutil cert -out /etc/elasticsearch/elastic-certificates.p12 -pass ""
[root@es-node1 ~]# chmod 660 /etc/elasticsearch/elastic-certificates.p12
3.2.2 配置 Elastic
编辑 Elastic 配置文件,添加如下内容(所有 es 节点都需要添加):
[root@es-node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
3.2.3 拷贝 TLS 证书
拷贝 TLS 证书至集群的所有 node 节点:
[root@es-node1 ~]# scp -rp /etc/elasticsearch/elastic-certificates.p12 root@192.168.170.133:/etc/elasticsearch/
[root@es-node1 ~]# scp -rp /etc/elasticsearch/elastic-certificates.p12 root@192.168.170.134:/etc/elasticsearch/
# 需要重启所有 Elastic 集群节点
[root@es-node1 ~]# systemctl restart elasticsearch.service
3.2.4 设置 Elastic 集群密码
一旦主节点开始运行,便可以为集群设置密码了:
-
auto 会为不同的内部堆栈生成随机密码
-
interactive 配置可以手动定义密码
# 请记录这些密码,我们很快就会再次用到这些密码
[root@es-node1 ~]# /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
Changed password for user apm_system
PASSWORD apm_system = mUU5SPS7Iv0EmUFfSsyb
Changed password for user kibana_system
PASSWORD kibana_system = PIj0BonhQIP9Y7t5GNM9
# Kibana 配置文件的账号密码
Changed password for user kibana
PASSWORD kibana = PIj0BonhQIP9Y7t5GNM9
Changed password for user logstash_system
PASSWORD logstash_system = KZaj7tqwkyn2xKnbwZXo
Changed password for user beats_system
PASSWORD beats_system = LdSCnYRTOsMnaMja6kuT
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = tmXp4pJcNFdAa7sU81HO
# 登陆 Kibana web 界面的账号密码
Changed password for user elastic
PASSWORD elastic = 7dfubJFsURn47sH8ChTg
3.2.5 配置 Kibana认证
在 kibana 中实现安全性,我们需要为 Kibana 用户添加密码。我们可以从之前 setup-passwords 命令的输出内容中找到密码:
[root@es-node2 ~]# vim /etc/kibana/kibana.yml
elasticsearch.username: "kibana"
elasticsearch.password: "PIj0BonhQIP9Y7t5GNM9"
[root@es-node2 ~]# systemctl restart kibana.service
这两行配置指定了 Kibana 连接到 Elasticsearch 集群时使用的用户名和密码。这些凭据用于验证 Kibana 与 Elasticsearch 集群的连接。
elasticsearch.username: "kibana_system"
:这行配置指定了连接到 Elasticsearch 时使用的用户名。这里的用户名是kibana_system
,它是 Elasticsearch 内置的一个用户,具有访问 Kibana 所需的权限。elasticsearch.password: "PIj0BonhQIP9Y7t5GNM9"
:这行配置指定了连接到 Elasticsearch 时使用的密码。这里的密码是PIj0BonhQIP9Y7t5GNM9
。请注意,这个密码在您的环境中可能是不同的。您需要使用与您的 Elasticsearch 集群相对应的正确密码。
这两行配置确保 Kibana 能够以正确的用户身份连接到 Elasticsearch 集群,并访问所需的数据。在配置 Kibana 时,您需要确保这些凭据与您的 Elasticsearch 集群中的用户设置相匹配。
3.5.6 配置 Logstash
Logstash 收集的配置文件也需要添加身份认证,才能把数据传输至 TLS 版的 ES 集群中:
[root@es-node1 ~]# vim /etc/logstash/conf.d/test6.conf
······
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["192.168.170.132:9200","192.168.170.133:9200","192.168.170.134:9200"]
user => "logstash_system"
password => "KZaj7tqwkyn2xKnbwZXo"
index => "%{[target_index]}"
template_overwrite => true
}
}
3.3 登陆 Kibana
我们通过浏览器并打开 http://192.168.170.133:5601 我们将会使用 elastic 超级用户进行登录,密码来自 setup-passwords 命今:
3.3.1 配置 RBAC
在 Kibana 中配置基于角色的访问控制 (RBAC):通过 TLS 加密和基于角色的访问控制确保 Elasticsearch 的安全 | Elastic Blog
上一篇文章:【Elastic (ELK) Stack 实战教程】08、Logstash 分析业务 APP、Nginx、Mysql 日志实践_Stars.Sky的博客-CSDN博客
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论
您可能感兴趣的博客