集群的日志监控系统基础配置及nginx负载均衡配置

  • 前文
  • 环境及准备工作
  • 开始搭建
  • Java配置
  • Java应用部署
  • nginx配置负载均衡
  • 避坑点
  • 总结


前文

上次给大家讲解单台应用服务器的plg日志系统搭建细节,下面给大家讲解应用集群的配置方式。
Promtail + Loki + Grafana 日志监控系统搭建

环境及准备工作

四台虚机,系统为centos8,总体框架图为

cenots sh脚本监控nginx nginx集群监控_loki

开始搭建

三台应用服务器配置类型,我以一台作为示例来搭建,其余两台参照这两台

Java配置

centos预装了JAVA8 ,这项可以跳过,如果 你们用的其他版本的系统,可以自行安装jdk。

Java应用部署

本次搭建了springBoot项目,作为应用服务。预留一个方法用来做后面的功能验证。这个方法主要就是两个方面,第一个日志记录调用情况,第二个日志,记录耗时。这个会在后续的日志监控中用到。

cenots sh脚本监控nginx nginx集群监控_java_02

项目打包成jar包,上传至应用服务器的home路径下,使用如下命令进行启动。由于本次只是为了做演示,所以运行内存之类的参数并没有加,大家有兴趣可以自己去研究研究。

java -jar main-0.0.1-SNAPSHOT.jar >/home/logs/Startup.Log 2>&1 &

cenots sh脚本监控nginx nginx集群监控_cenots sh脚本监控nginx_03


项目的日志目录放在/home/log/info.log下,打开日志,调用日志,此时调用正常。应用部署完毕

cenots sh脚本监控nginx nginx集群监控_cenots sh脚本监控nginx_04


参照之前部署的教程,部署Promtail。但Promtail的配置有所变动,修改之前的job标签变成host标签,用来区分不同的主机,启动Promtail,命令参照上篇博客

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://192.168.175.131:3100/loki/api/v1/push

scrape_configs:
- job_name: info
  static_configs:
  - targets:
      - localhost
    labels:
      host: 192.168.175.128
      __path__: /home/log/info.log

配置完成后,在grafana就可以找到刚刚配置的主机

cenots sh脚本监控nginx nginx集群监控_java_05


按照这个步骤配置和部署其余两台应用服务器,注意每台服务器都需要部署Promtail。配置完成后,grafana的标签,就会出现刚刚配置好的三台host

cenots sh脚本监控nginx nginx集群监控_nginx_06


此时完成的是对三台服务器的日志监控,严格意义上来说,现在不能算是一个集群,只能算是多台服务器。下面开始集群的配置。采用nginx实现

nginx配置负载均衡

centos8已经默认安装了nginx服务,我们只需要修改nginx的配置来实现负载均衡。默认安装下的nginx配置文件在 /etc/nginx下,进入该目录下,修改相关配置

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
	#对应刚刚配置的三台服务器
    #gzip  on;
    upstream test.miaohr.com {
	server 192.168.175.128:8070;
	server 192.168.175.129:8070;
	server 192.168.175.130:8070;
    }
    

    server {   
        listen       80;   
        server_name  test.miaohr.com;   
        charset utf-8;   
        location / {   
            root   html;   
            index  index.html index.htm;   
            proxy_pass        http://test.miaohr.com;   
            proxy_set_header  X-Real-IP  $remote_addr;   
            client_max_body_size  100m;
        }   
  
  
   
    }   
}

配置完成后,启动nginx。nginx负载均衡的模式有多种,本次默认为缺省状态下的时间片轮询机制。
此刻,访问http://192.168.175.131/getSxbm 便可以访问到三台应用服务器节点的随机一台。为了更直接的体现这种效果,我们就通过grafana配置一个可视化页面来观察

间隔若干秒分别调用此接口,就发现,三次请求,都打到了不同的机器上。简易版的负载均衡实现完毕。

cenots sh脚本监控nginx nginx集群监控_java_07

避坑点

  • centos8需要开放端口,或者更简单暴力一点,直接关闭防火墙systemctl disable firewalld.service 关闭完要重启
  • nginx配置时如若不生效可以查看/var/log/nginx 下的日志,我遇到的问题是配置的节点地址一直访问不过去日志提示解决Nginx的13: Permission denied) while connecting to upstream
  • 解决方案`
  • 1.关闭SeLinux
        1.临时关闭(不用重启机器):
          setenforce 0 ##设置SELinux 成为permissive模式
          ##setenforce 1 设置SELinux 成为enforcing模式
        2.修改配置文件需要重启机器:
          修改/etc/selinux/config 文件
          将SELINUX=enforcing改为SELINUX=disabled
          重启机器即可
      2.执行下面的命令
          setsebool -P httpd_can_network_connect 1`
    亲测可用。

总结

plg模式的日志监控系统,原理在于将每一台节点的日志推送到loki服务器进行集中处理。每新增一台节点,都需要同步配置一个Promtail。plg模式搭建到此结束,下次给大家搭搭elk模式的日志监控系统。