Linux云计算SRE-第二十周

发布于:2025-03-14 ⋅ 阅读:(12) ⋅ 点赞:(0)

完成ELK综合案例里面的实验,搭建完整的环境

一、

1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。

#node0、node1、node2采用以下相同方式收集nginx日志
 
# 更新软件包列表并安装nginx
[root@node0 ~]# apt update && apt -y install nginx
 
# 编辑nginx的主配置文件,以自定义日志格式
[root@node0 ~]# vim /etc/nginx/nginx.conf
# 在http块中定义一个新的日志格式access_json,该格式将日志记录为JSON
http {
  ...
  log_format access_json '{
        "@timestamp": "$time_iso8601",  # 日志时间戳
        "host": "$server_addr",         # 服务器IP地址
        "clientip": "$remote_addr",     # 客户端IP地址
        "size": $body_bytes_sent,       # 发送的字节数
        "responsetime": $request_time,  # 请求处理时间
        "upstreamtime": "$upstream_response_time",  # 上游服务器响应时间
        "upstreamhost": "$upstream_addr",  # 上游服务器地址
        "http_host": "$host",           # 请求的host头
        "uri": "$uri",                  # 请求的URI
        "domain": "$host",              # 同http_host,请求的域名
        "xff": "$http_x_forwarded_for", # X-Forwarded-For头,用于识别通过HTTP代理或负载均衡器连接到web服务器的客户端的原始IP地址
        "referer": "$http_referer",     # Referer头,表示请求的来源页面
        "tcp_xff": "$proxy_protocol_addr",  # 如果使用了Proxy Protocol,这是客户端的真实IP地址
        "http_user_agent": "$http_user_agent",  # 用户代理字符串
        "status": "$status",            # HTTP响应状态码
        "request_method": "$request_method"  # 请求方法(GET, POST等)
  }';
# 使用新定义的日志格式记录访问日志
access_log /var/log/nginx/access_json.log access_json;
# 错误日志配置保持不变
error_log /var/log/nginx/error.log;
}
 
# 编辑nginx的默认站点配置文件,注释掉默认的try_files指令
[root@node0 ~]# vim /etc/nginx/sites-available/default
location / {
    ...
    #try_files $uri $uri/ =404;  # 注释掉这一行,意味着可以自定义处理请求的方式
}
 
# 重启nginx以应用更改
[root@node0 ~]# systemctl restart nginx.service

# 安装filebeat的deb包
[root@node0 ~]# dpkg -i filebeat-8.12.2-amd64.deb  # 安装filebeat
 
# 备份filebeat的配置文件
[root@node0 ~]# cp /etc/filebeat/filebeat.yml{,.bak}
 
# 编辑filebeat的配置文件
[root@node0 ~]# vim /etc/filebeat/filebeat.yml
# 配置filebeat的输入,包括nginx访问日志、错误日志和系统日志
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/access_json.log
    json.keys_under_root: true  # 将JSON字段作为顶级字段输出
    json.overwrite_keys: true   # 如果键冲突,覆盖旧值
    tags: ["nginx-access"]
 
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/error.log
    tags: ["nginx-error"]
 
  - type: log
    enabled: true
    paths:
      - /var/log/syslog
    tags: ["syslog"]
 
# 配置filebeat的输出到Redis
output.redis:
  hosts: ["10.0.0.130:6379"]  # Redis服务器地址和端口
  password: "123456"          # Redis密码
  db: 0                       # 使用Redis的0号数据库
 
# 启用并启动filebeat服务
[root@node0 ~]# systemctl enable --now filebeat

 2、安装redis和logstash,配置node3(10.0.0.130),node4(10.0.0.140),采用logstash转发nginx日志到elasticsearch集群。

# 在node3节点上更新软件包列表并安装Redis服务器
[root@node3 ~]# apt update && apt -y install redis
 
# 编辑Redis配置文件,以允许来自任何IP地址的连接,并禁用自动保存功能
[root@node3 ~]# vim /etc/redis/redis.conf
# 允许Redis监听所有网络接口
bind 0.0.0.0
# 禁用所有的save命令,这意味着Redis不会将数据自动保存到磁盘上
# 下面的三行是被注释掉的,表示原本的保存策略被禁用
#save 900 1
#save 300 10
#save 60 10000
# 设置Redis的访问密码
requirepass 123456
 
# 重启Redis服务以应用配置更改
[root@node3 ~]# systemctl restart redis
 
# 在node4节点上更新软件包列表并安装OpenJDK 17
[root@node4 ~]# apt update && apt -y install openjdk-17-jdk
 
# 安装Logstash,logstash-8.12.2-amd64.deb包已经传输到node4节点
[root@node4 ~]# dpkg -i logstash-8.12.2-amd64.deb 
 
# 编辑Logstash的配置文件,设置从Redis读取数据并输出到Elasticsearch
[root@node4 ~]# vim /etc/logstash/conf.d/redis-to-es.conf
# 输入部分,配置Logstash从Redis读取数据
input {
  redis {
    # Redis服务器的主机地址
    host => "10.0.0.130"
    # Redis服务器的端口
    port => 6379
    # Redis的访问密码
    password => "123456"
    # 使用Redis的哪个数据库
    db => 0
    # Redis中数据的key
    key => "filebeat"
    # 数据类型,这里设置为list
    data_type => "list"
  }
}
 
# 输出部分,根据条件将数据输出到不同的Elasticsearch索引
output {
  # 如果数据标签中包含"syslog",则输出到指定的Elasticsearch索引
  if "syslog" in [tags] {
    elasticsearch {
      # Elasticsearch集群的节点地址
      hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
      # 使用的索引名称,包含日期信息
      index => "syslog-%{+YYYY.MM.dd}"
    }
  }
  # 如果数据标签中包含"nginx-access",则输出到另一个索引
  if "nginx-access" in [tags] {
    elasticsearch {
      hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
      index => "nginx-accesslog-%{+YYYY.MM.dd}"
      # 允许覆盖模板设置
      template_overwrite => true
    }
  }
  # 如果数据标签中包含"nginx-error",则输出到另一个索引
  if "nginx-error" in [tags] {
    elasticsearch {
      hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
      index => "nginx-errorlog-%{+YYYY.MM.dd}"
      template_overwrite => true
    }
  }
}
 
# 重启Logstash服务以应用配置更改
[root@node4 ~]# systemctl restart logstash

3、安装elasticsearch集群、kibana、cerebro,配置node6(10.0.0.160),node7(10.0.0.170),node8(10.0.0.180),利用kibana和cerebro查看收集的日志。 

# 在node6节点上安装Kibana的deb包
[root@node6 ~]# dpkg -i kibana-8.12.2-amd64.deb
 
# 编辑Kibana的配置文件,设置监听端口、主机地址、公共基础URL、Elasticsearch集群地址以及界面语言
[root@node6 ~]# vim /etc/kibana/kibana.yml
server.port: 5601  # Kibana服务监听端口
server.host: "0.0.0.0"  # Kibana监听的主机地址,0.0.0.0表示监听所有IP
server.publicBaseUrl: "http://kibana.zhangyao.com"  # Kibana的公共基础URL
elasticsearch.hosts:  # Elasticsearch集群的地址列表
  ["http://10.0.0.160:9200","http://10.0.0.170:9200","http://10.0.0.180:9200"]
i18n.locale: "zh-CN"  # 界面语言设置为中文
 
# 重启Kibana服务以应用更改
[root@node6 ~]# systemctl restart kibana
 
# 在node6节点上安装OpenJDK 11 JDK
[root@node6 ~]# apt -y install openjdk-11-jdk
 
# 在node6节点上安装Cerebro的deb包,Cerebro是一个Elasticsearch的Web UI管理工具
[root@node6 ~]# wegt https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb
[root@node6 ~]# dpkg -i cerebro_0.9.4_all.deb
 
# 编辑Cerebro的配置文件,设置数据存储路径
[root@node6 ~]# vim /etc/cerebro/application.conf
data.path: "/var/lib/cerebro/cerebro.db"  # Cerebro的数据存储路径
#data.path = "./cerebro.db"  # 注释掉默认路径
 
# 重启Cerebro服务以应用更改
[root@node6 ~]# systemctl restart cerebro.service
 
# 在node6、node7、node8节点上分别安装Elasticsearch的deb包
[root@node6 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
[root@node7 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
[root@node8 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
 
# 编辑node6上的Elasticsearch配置文件,设置集群名称、节点名称、监听主机、发现主机列表、禁用安全功能以及初始主节点列表
[root@node6 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: cls-cluster  # 集群名称
node.name: node-1  # 节点名称
network.host: 0.0.0.0  # 监听主机地址
discovery.seed_hosts: ["10.0.0.160","10.0.0.170","10.0.0.180"]  # 发现主机列表
xpack.security.enabled: false  # 禁用安全功能
cluster.initial_master_nodes: ["10.0.0.160","10.0.0.170","10.0.0.180"]  # 初始主节点列表
 
# 编辑JVM选项,设置最小和最大堆内存大小
[root@node6 ~]# vim /etc/elasticsearch/jvm.options
-Xms512m  # 最小堆内存大小
-Xmx512m  # 最大堆内存大小
 
# 使用rsync将Elasticsearch的配置文件同步到node7和node8节点
[root@node6 ~]# rsync  /etc/elasticsearch/elasticsearch.yml 10.0.0.170:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync  /etc/elasticsearch/elasticsearch.yml 10.0.0.180:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.170:/etc/elasticsearch/jvm.options
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.180:/etc/elasticsearch/jvm.options 
 
# 分别编辑node7和node8上的Elasticsearch配置文件,仅更改节点名称
[root@node7 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-2
[root@node8 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-3
 
# 在node6、node7、node8节点上分别重新加载systemd守护进程、启用Elasticsearch服务并启动服务
[root@node6 ~]# sudo systemctl daemon-reload
[root@node6 ~]# sudo systemctl enable elasticsearch.service
[root@node6 ~]# sudo systemctl restart elasticsearch.service
[root@node7 ~]# sudo systemctl daemon-reload
[root@node7 ~]# sudo systemctl enable elasticsearch.service
[root@node7 ~]# sudo systemctl start elasticsearch.service
[root@node8 ~]# sudo systemctl daemon-reload
[root@node8 ~]# sudo systemctl enable elasticsearch.service
[root@node8 ~]# sudo systemctl start elasticsearch.service
 
# 在node6节点上使用curl命令检查Elasticsearch集群中的节点信息
[root@node6 ~]# curl 'http://127.0.0.1:9200/_cat/nodes?v'
# 输出显示了集群中每个节点的IP地址、各种性能指标以及节点名称等信息
ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
10.0.0.180           44          95   5    0.56    0.38     0.29 cdfhilmrstw *      node-3
10.0.0.170           39          95   5    0.32    0.19     0.12 cdfhilmrstw -      node-2
10.0.0.160           33          60   1    0.19    0.28     0.22 cdfhilmrstw -      node-1
 
# 在node6节点上使用curl命令访问nginx服务器,生成访问日志
[root@node6 ~]# curl http://10.0.0.100
[root@node6 ~]# curl http://10.0.0.110
[root@node6 ~]# curl http://10.0.0.120
 
#修改windows的配置文件C:\Windows\System32\drivers\etc
10.0.0.160 kibana.zhangyao.com

二、

 1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志,并发送到kafka集群。

#node0、node1、node2采用以下相同方式收集nginx日志
 
# 更新软件包列表并安装nginx
[root@node0 ~]# apt update && apt -y install nginx
 
# 编辑nginx的主配置文件,以自定义日志格式
[root@node0 ~]# vim /etc/nginx/nginx.conf
# 在http块中定义一个新的日志格式access_json,该格式将日志记录为JSON
http {
  ...
  log_format access_json '{
        "@timestamp": "$time_iso8601",  # 日志时间戳
        "host": "$server_addr",         # 服务器IP地址
        "clientip": "$remote_addr",     # 客户端IP地址
        "size": $body_bytes_sent,       # 发送的字节数
        "responsetime": $request_time,  # 请求处理时间
        "upstreamtime": "$upstream_response_time",  # 上游服务器响应时间
        "upstreamhost": "$upstream_addr",  # 上游服务器地址
        "http_host": "$host",           # 请求的host头
        "uri": "$uri",                  # 请求的URI
        "domain": "$host",              # 同http_host,请求的域名
        "xff": "$http_x_forwarded_for", # X-Forwarded-For头,用于识别通过HTTP代理或负载均衡器连接到web服务器的客户端的原始IP地址
        "referer": "$http_referer",     # Referer头,表示请求的来源页面
        "tcp_xff": "$proxy_protocol_addr",  # 如果使用了Proxy Protocol,这是客户端的真实IP地址
        "http_user_agent": "$http_user_agent",  # 用户代理字符串
        "status": "$status",            # HTTP响应状态码
        "request_method": "$request_method"  # 请求方法(GET, POST等)
 }';
# 使用新定义的日志格式记录访问日志
access_log /var/log/nginx/access_json.log access_json;
# 错误日志配置保持不变
error_log /var/log/nginx/error.log;
}
 
# 编辑nginx的默认站点配置文件,注释掉默认的try_files指令
[root@node0 ~]# vim /etc/nginx/sites-available/default
location / {
    ...
    #try_files $uri $uri/ =404;  # 注释掉这一行,意味着可以自定义处理请求的方式
}
 
# 重启nginx以应用更改
[root@node0 ~]# systemctl restart nginx

# 安装filebeat的deb包
[root@node0 ~]# dpkg -i filebeat-8.12.2-amd64.deb  # 安装filebeat
 
# 备份filebeat的配置文件
[root@node0 ~]# cp /etc/filebeat/filebeat.yml{,.bak}
 
# 编辑filebeat的配置文件
[root@node0 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/access_json.log
    json.keys_under_root: true
    json.overwrite_keys: true
    tags: ["nginx-access"]
 
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/error.log
    tags: ["nginx-error"]
 
  - type: log
    enabled: true
    paths:
      - /var/log/syslog
    tags: ["syslog"]
 
output.kafka:
  hosts: ["10.0.0.130:9092", "10.0.0.140:9092", "10.0.0.150:9092"]
  topic: filebeat-log
  partition.round_robin:
    reachable_only: true
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000
 
 
# 启用并启动filebeat服务
[root@node0 ~]# systemctl enable --now filebeat

2、安装kafka集群和logstash,mysql,配置node3(10.0.0.130),node4(10.0.0.140),node5(10.0.0.150)采用logstash转发nginx日志到elasticsearch集群。

# 在 node3 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node3 ~]# bash install_kafka_cluster.sh
# 在 node4 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node4 ~]# bash install_kafka_cluster.sh
# 在 node5 节点上执行 install_kafka_cluster.sh 脚本,用于安装 Kafka 集群相关组件
[root@node5 ~]# bash install_kafka_cluster.sh
 
# 在 node3 节点上启动 Kafka 服务,使用指定的配置文件
[root@node3 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
# 在 node4 节点上启动 Kafka 服务,使用指定的配置文件
[root@node4 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
# 在 node5 节点上启动 Kafka 服务,使用指定的配置文件
[root@node5 ~]# /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
 
 
# 在 node4 节点上更新系统软件包列表,并安装 OpenJDK 17,因为 Logstash 依赖 Java 环境
[root@node4 ~]# apt update && apt -y install openjdk-17-jdk
# 在 node4 节点上使用 dpkg 工具安装 Logstash 的 deb 包
[root@node4 ~]# dpkg -i logstash-8.12.2-amd64.deb 
 
# 在 node4 节点上使用 vim 编辑器编辑 Logstash 的配置文件 kafka-to-es.conf
# 此配置文件用于将 Kafka 中的数据转发到 Elasticsearch
[root@node4 ~]# vim /etc/logstash/conf.d/kafka-to-es.conf
# Logstash 的输入配置部分,使用 Kafka 作为数据源
input {
    kafka {
        # 指定 Kafka 集群的引导服务器地址,用于连接 Kafka 集群
        bootstrap_servers => "10.0.0.130:9092,10.0.0.140:9092,10.0.0.150:9092"
        # 指定要消费的 Kafka 主题
        topics => "filebeat-log"
        # 指定消息的编解码器为 JSON,用于解析 Kafka 中的消息
        codec => "json"
    }
}
 
# Logstash 的输出配置部分,根据日志的标签将数据输出到不同的 Elasticsearch 索引
output {
    # 如果日志标签包含 "nginx-access",则将数据发送到 Elasticsearch
    if "nginx-access" in [tags] {
        elasticsearch {
            # 指定 Elasticsearch 集群的节点地址
            hosts => ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
            # 指定 Elasticsearch 中的索引名称,按日期生成
            index => "logstash-kafka-nginx-accesslog-%{+YYYY.MM.dd}"
            # 允许覆盖现有的索引模板
            template_overwrite => true
        }
         jdbc {
           # 配置 JDBC 连接字符串
           connection_string => "jdbc:mysql://10.0.0.150/elk?user=elk&password=123456&useUnicode=true&characterEncoding=UTF8"
           # 配置 SQL 插入语句,使用占位符
           statement => "INSERT INTO elklog (clientip, responsetime, uri, status) VALUES (?, ?, ?, ?)"
           # 配置占位符对应的字段
           statement_params => {
             "1" => "clientip",
             "2" => "responsetime",
             "3" => "uri",
             "4" => "status"
           }
        }
    } 
    # 如果日志标签包含 "nginx-error",则将数据发送到 Elasticsearch
    else if "nginx-error" in [tags] {
        elasticsearch {
            # 指定 Elasticsearch 集群的节点地址
            hosts =>  ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
            # 指定 Elasticsearch 中的索引名称,按日期生成
            index => "logstash-kafka-nginx-errorlog-%{+YYYY.MM.dd}"
            # 允许覆盖现有的索引模板
            template_overwrite => true
        }
    } 
    # 如果日志标签包含 "syslog",则将数据发送到 Elasticsearch
    else if "syslog" in [tags] {
        elasticsearch {
            # 指定 Elasticsearch 集群的节点地址
            hosts =>  ["10.0.0.160:9200", "10.0.0.170:9200", "10.0.0.180:9200"]
            # 指定 Elasticsearch 中的索引名称,按日期生成
            index => "logstash-kafka-syslog-%{+YYYY.MM.dd}"
            # 允许覆盖现有的索引模板
            template_overwrite => true
        }
    }
}
 
# 在node4节点上,使用dpkg命令安装mysql-connector-j的deb包,该包适用于ubuntu22.04系统,版本为8.0.33
[root@node4 ~]# dpkg -i mysql-connector-j_8.0.33-1ubuntu22.04_all.deb  
 
# 在node4节点上,创建目录路径 /usr/share/logstash/vendor/jar/jdbc,如果父目录不存在则一并创建
[root@node4 ~]# mkdir -p /usr/share/logstash/vendor/jar/jdbc  
 
# 在node4节点上,将mysql-connector-j-8.0.33.jar文件从 /usr/share/java/ 复制到 /usr/share/logstash/vendor/jar/jdbc/ 目录下
[root@node4 ~]# cp /usr/share/java/mysql-connector-j-8.0.33.jar /usr/share/logstash/vendor/jar/jdbc/  
 
# 在node4节点上,递归修改 /usr/share/logstash/vendor/jar/ 目录及其所有子目录和文件的所有者为logstash用户,所属组为logstash组
[root@node4 ~]# chown -R logstash.logstash /usr/share/logstash/vendor/jar/  
 
# 在node4节点上,更新软件包列表并安装ruby语言环境
[root@node4 ~]# apt update && apt -y install ruby  
 
# 在node4节点上,修改ruby的gem源,添加国内的ruby-china源,并移除默认的rubygems.org源
[root@node4 ~]# gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/  
 
# 在node4节点上,使用logstash的插件安装命令,安装logstash-output-jdbc插件
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin install logstash-output-jdbc
#如果无法在线安装,可以先从已经安装的主机导出插件,再导入
[root@ubuntu22 ~]# /usr/share/logstash/bin/logstash-plugin prepare-offline-pack logstash-output-jdbc
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin install file:///usr/share/logstash-offline-plugins-8.12.2.zip
#检查插件安装成功
[root@node4 ~]# /usr/share/logstash/bin/logstash-plugin|grep jdbc
 
# 在node4节点上,重启logstash服务
[root@node4 ~]# systemctl restart logstash  
 
 
# 在node5节点上,更新软件包列表并安装mysql服务器
[root@node5 ~]# apt update && apt -y install mysql-server  
 
# 在node5节点上,使用vim编辑器打开mysql配置文件mysqld.cnf,修改其中的绑定地址相关配置
[root@node5 ~]# vim /etc/mysql/mysql.conf.d/mysqld.cnf  
# 将mysql服务的绑定地址修改为0.0.0.0,允许所有IP地址访问
bind-address        = 0.0.0.0  
# 将mysqlx协议的绑定地址也修改为0.0.0.0,允许所有IP地址访问
mysqlx-bind-address = 0.0.0.0  
 
# 在node5节点上,重启mysql服务使配置生效
[root@node5 ~]# systemctl restart mysql.service  
 
# 在node5节点上,进入mysql命令行客户端
[root@node5 ~]# mysql  
 
# 在mysql中,创建名为elk的数据库
[root@node5 ~]# create database elk;  
 
# 在mysql中,创建用户elk,允许来自10.0.0.0/24网段的主机连接,密码为123456
[root@node5 ~]# create user elk@"10.0.0.%" identified by '123456';  
 
# 在mysql中,授予用户elk对elk数据库下所有表的所有权限
[root@node5 ~]# grant all privileges on elk.* to elk@"10.0.0.%";  
 
# 在mysql中,刷新权限使配置立即生效
[root@node5 ~]# flush privileges;  
 
# 在mysql中,切换到elk数据库
[root@node5 ~]# use elk;  
 
# 在elk数据库中,创建名为elklog的表,包含clientip、responsetime、uri、status、time字段,time字段默认值为当前时间戳
[root@node5 ~]# CREATE TABLE elklog ( clientip VARCHAR(39),responsetime DECIMAL(10, 3),uri VARCHAR(256),status CHAR(3),time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

3、安装elasticsearch集群、kibana、cerebro,配置node6(10.0.0.160),node7(10.0.0.170),node8(10.0.0.180),利用kibana和cerebro查看收集的日志。

# 在node6节点上安装Kibana的deb包
[root@node6 ~]# dpkg -i kibana-8.12.2-amd64.deb
 
# 编辑Kibana的配置文件,设置监听端口、主机地址、公共基础URL、Elasticsearch集群地址以及界面语言
[root@node6 ~]# vim /etc/kibana/kibana.yml
server.port: 5601  # Kibana服务监听端口
server.host: "0.0.0.0"  # Kibana监听的主机地址,0.0.0.0表示监听所有IP
server.publicBaseUrl: "http://kibana.zhangyao.com"  # Kibana的公共基础URL
elasticsearch.hosts:  # Elasticsearch集群的地址列表
  ["http://10.0.0.160:9200","http://10.0.0.170:9200","http://10.0.0.180:9200"]
i18n.locale: "zh-CN"  # 界面语言设置为中文
 
# 重启Kibana服务以应用更改
[root@node6 ~]# systemctl restart kibana
 
# 在node6节点上安装OpenJDK 11 JDK
[root@node6 ~]# apt -y install openjdk-11-jdk
 
# 在node6节点上安装Cerebro的deb包,Cerebro是一个Elasticsearch的Web UI管理工具
[root@node6 ~]# dpkg -i cerebro_0.9.4_all.deb
 
# 编辑Cerebro的配置文件,设置数据存储路径
[root@node6 ~]# vim /etc/cerebro/application.conf
data.path: "/var/lib/cerebro/cerebro.db"  # Cerebro的数据存储路径
#data.path = "./cerebro.db"  # 注释掉默认路径
 
# 重启Cerebro服务以应用更改
[root@node6 ~]# systemctl restart cerebro.service
 
# 在node6、node7、node8节点上分别安装Elasticsearch的deb包
[root@node6 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
[root@node7 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
[root@node8 ~]# dpkg -i elasticsearch-8.12.2-amd64.deb 
 
# 编辑node6上的Elasticsearch配置文件,设置集群名称、节点名称、监听主机、发现主机列表、禁用安全功能以及初始主节点列表
[root@node6 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: zjy-cluster  # 集群名称
node.name: node-6  # 节点名称
network.host: 0.0.0.0  # 监听主机地址
discovery.seed_hosts: ["10.0.0.160","10.0.0.170","10.0.0.180"]  # 发现主机列表
xpack.security.enabled: false  # 禁用安全功能
cluster.initial_master_nodes: ["10.0.0.160","10.0.0.170","10.0.0.180"]  # 初始主节点列表
 
# 编辑JVM选项,设置最小和最大堆内存大小
[root@node6 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g  # 最小堆内存大小
-Xmx1g  # 最大堆内存大小
 
# 使用rsync将Elasticsearch的配置文件同步到node7和node8节点
[root@node6 ~]# rsync  /etc/elasticsearch/elasticsearch.yml 10.0.0.170:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync  /etc/elasticsearch/elasticsearch.yml 10.0.0.180:/etc/elasticsearch/elasticsearch.yml
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.170:/etc/elasticsearch/jvm.options
[root@node6 ~]# rsync /etc/elasticsearch/jvm.options 10.0.0.180:/etc/elasticsearch/jvm.options 
 
# 分别编辑node7和node8上的Elasticsearch配置文件,仅更改节点名称
[root@node7 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-7
[root@node8 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-8
 
# 在node6、node7、node8节点上分别重新加载systemd守护进程、启用Elasticsearch服务并启动服务
[root@node6 ~]# sudo systemctl daemon-reload
[root@node6 ~]# sudo systemctl enable elasticsearch.service
[root@node6 ~]# sudo systemctl restart elasticsearch.service
[root@node7 ~]# sudo systemctl daemon-reload
[root@node7 ~]# sudo systemctl enable elasticsearch.service
[root@node7 ~]# sudo systemctl restart elasticsearch.service
[root@node8 ~]# sudo systemctl daemon-reload
[root@node8 ~]# sudo systemctl enable elasticsearch.service
[root@node8 ~]# sudo systemctl restart elasticsearch.service
 
# 在node6节点上使用curl命令检查Elasticsearch集群中的节点信息
[root@node6 ~]# curl 'http://127.0.0.1:9200/_cat/nodes?v'
# 输出显示了集群中每个节点的IP地址、各种性能指标以及节点名称等信息
ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
10.0.0.170           36          97   2    0.31    0.16     0.07 cdfhilmrstw -      node-7
10.0.0.180           31          95   4    0.54    0.38     0.27 cdfhilmrstw -      node-8
10.0.0.160           31          96  13    2.38    1.43     0.73 cdfhilmrstw *      node-6
 
# 在node6节点上使用curl命令访问nginx服务器,生成访问日志
[root@node6 ~]# curl http://10.0.0.100
[root@node6 ~]# curl http://10.0.0.110
[root@node6 ~]# curl http://10.0.0.120
 
#修改windows的配置文件C:\Windows\System32\drivers\etc
10.0.0.160 kibana.zhangyao.com
浏览器访问kibana.zhangyao.com:5601和kibana.zhangyao.com:9000