【Elastic (ELK) Stack 实战教程】09、Kibana 分析站点业务日志

目录

一、kibana 数据展示概述

1.1 Kibana 基本介绍

1.2 Kibana 部署架构

二、Kibana 展示业务日志

2.1 日志分析介绍

2.2 两个维度分析日志

2.2.1 Nginx 访问分析

2.2.2 网站业务数据分析

2.3 日志分析架构图 

2.4 日志分析案例实战 

扫描二维码关注公众号,回复: 14692637 查看本文章

2.4.1 配置 Filebeat

2.4.2 配置 Logstash

2.5 配置 kibana

2.5.1 创建 kibana 索引

2.5.2 统计网站总 PV、独立 IP 个数 (指标)

2.5.3 统计网站的总流量(指标图)

2.5.4 统计访问 IP Top10(水平条形图) 

2.5.5 统计来源的 refrer(标签云)

2.5.6 统计访问状态码、客户端设备(饼图时序图)

2.6 图形汇聚

三、Kibana 安全访问控制

3.1 基于 Nginx 访问控制

3.1.1 安装 Nginx 服务

3.1.2 配置 Nginx 反向代理,以及端口隐藏

3.1.3 浏览器访问

3.2 基于 RBAC 访问控制

3.2.1 启用 Elastic TLS

3.2.2 配置 Elastic

3.2.3 拷贝 TLS 证书

3.2.4 设置 Elastic 集群密码

3.2.5 配置 Kibana认证 

3.5.6 配置 Logstash 

3.3 登陆 Kibana

3.3.1 配置 RBAC 


一、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 可以直接通过浏览器打开进行操作,这样的话任何人都可以通过该方式打开,极其的不安全,我们可以通过如下两种方式来实现访问控制:

  1.  nginx+kibana 非常简单实现的方式;

  2.  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 [email protected]:/etc/elasticsearch/

[root@es-node1 ~]# scp -rp /etc/elasticsearch/elastic-certificates.p12 [email protected]:/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博客

猜你喜欢

转载自blog.csdn.net/weixin_46560589/article/details/129938501