跳到主要内容

Nginx 配置正则匹配及 socket 支持

· 阅读需 2 分钟

Nginx 配置正则匹配及 socket 支持


upstream console.api{
server api:80;
}

upstream admin.api{
server admin-api:80;
}

upstream middle.api{
server dns-middleware-ws:80;
}

server {
listen 443 ssl;
server_name dev.api.xxx.com;

error_log /var/log/nginx/dev.api.xxx.com-error.log debug;
access_log /var/log/nginx/dev.api.xxx.com-access.log;

ssl_certificate /data/identify/dev.api.xxx.com.pem;
ssl_certificate_key /data/identify/dev.api.xxx.com.key;

# 默认版本号、子系统、请求路径
set $version v1; # 版本号 v开头,后面跟1~3个纯数字
set $subsystem console; # 子系统名,字母+中划线和点号组成,
set $subsystem_request_uri $request_uri;

# /子系统/path...
if ($request_uri ~* "^/([a-z]\w+[a-z0-9]+)/(.*)"){
set $subsystem $1;
set $subsystem_request_uri $2;
}

# /子系统/版本号/path...
if ($request_uri ~* "^/([a-z]\w+[a-z0-9]+)/(v[0-9]{1,3})/(.*)"){
set $subsystem $1;
set $version $2;
set $subsystem_request_uri $3;
}

# 如果所以的子系统都不匹配,设置成默认的子系统
if ($subsystem !~* "^(console|admin|middle)$"){
set $subsystem console;
}

# 配置 socket
location ~* "/middle/(v[0-9]{1,3}/)?ws" { # 中间件的 webSocket 配置
proxy_pass http://$subsystem.api/$subsystem_request_uri;
proxy_http_version 1.1; #WebSocket
proxy_set_header Upgrade $http_upgrade; #WebSocket
proxy_set_header Connection $connection_upgrade; #WebSocket
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Version $version;
proxy_set_header Host $host:$server_port;
}

# 统一代理到 http://$subsystem/path,去掉子系统名和
location / { # 目前已经实现的子系统
proxy_pass http://$subsystem.api/$subsystem_request_uri;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Version $version;
proxy_set_header Host $host:$server_port;
}
}

xxl-job 部署及应用

· 阅读需 2 分钟

xxl-job 服务端安装

docker run -d -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.2.90:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC \
--spring.datasource.username=root \
--spring.datasource.password=obcijV6j5BjvLLB8gJZpUC6aho \
--spring.datasource.driver-class-name=com.mysql.jdbc.Driver" \
-p 9088:8080 \
-v /data/xxl-job:/data/applogs \
--name xxl-job \
-d xuxueli/xxl-job-admin:2.3.0

# --xxl.job.accessToken=csml3ewi3al1oehxmo68pqxer" \
# 执行期鉴权所需的配置

# 浏览器访问
IP:9088/xxl-job-admin

xxl-job 执行器部署

# 本地下载安装包
wget https://github.com/xuxueli/xxl-job/archive/refs/tags/2.3.0.zip
unzip 2.3.0.zip

# 使用 IDEA 打开编辑 (需要修改的点)
# logback.xml
<property name="log.path" value="/Users/macbook/Software/log/xxl-job-executor-sample-springboot.log"/>

# application.properties
server.port=9088
xxl.job.admin.addresses=http://192.168.2.93:9088/xxl-job-admin
# xxl.job.accessToken= # 如果服务端有加 token 验证,这条需要添加
xxl.job.executor.appname=test-admin-api-cron-executor-sample # 与xxl服务端创建项目名需相同
xxl.job.executor.logpath=/opt

# mvn package 打成 jar 包,rz 到代码对应目录

将执行器打入容器中

# 修改 Dockerfile
FROM csm.io/php:apache-composer-v1
RUN mkdir -p /var/www/csm/runtime/log && mkdir /var/www/csm/runtime/session && mkdir /var/www/csm/runtime/tmp && chown -R www-data. /var/www/csm/runtime/

WORKDIR /var/www/csm

ADD ./xxl-job-executor.jar /opt/
ADD ./jdk-8u311-linux-i586.tar.gz /opt/
#COPY ./xxl-job-config /opt/config #此处将application.properties已经打入jar包中了

ADD ./test-admin-api-cron.tar.gz /var/www/csm
ADD ./\.env /var/www/csm
ADD ./000-default.conf /etc/apache2/sites-enabled/000-default.conf
RUN composer config -g secure-http false && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && composer config -g -l
RUN echo "Asia/Shanghai" > /etc/timezone && composer update

RUN apt-get update && \
apt-get install -y libc6-i386 && \
/opt/jdk1.8.0_311/bin/java -version

#CMD [ "bash", "/var/www/csm/crontab/cron.sh" ]
CMD [ "/opt/jdk1.8.0_311/bin/java", "-jar" ,"xxl-job-executor.jar" ]

#----------------------------------------------
# cron.sh 文件
cat cron.sh
#!/bin/bash
/opt/jdk1.8.0_311/bin/java -jar xxl-job-executor.jar

xxl-job 服务端配置执行器与任务

AppName 需与 jar 打入的配置相同,查看执行器是否自动注册

![在这里插入图片描述](/img/xxl-job 部署及应用/client.jpg)

编写执行任务

![管理任务](/img/xxl-job 部署及应用/manage.jpg)

Loki 日志收集系统部署

· 阅读需 2 分钟

loki日志收集系统部署

架构图介绍: 在这里插入图片描述

promtail 部署

下载地址

# 解压,下载官方配置模板并修改
mkdir /data/promtail
unzip promtail-linux-amd64.zip
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml

# 编辑配置
vim promtail-local-config.yaml

server:
http_listen_port: 9080
grpc_listen_port: 0

positions:
filename: /tmp/positions.yaml

clients:
- url: http://192.168.2.81:3100/loki/api/v1/push ## 此处lokiserver修改为服务器端地址

scrape_configs:
- job_name: application # job名称,自定义
static_configs:
- targets: # 如测试环境多个应用多个路径,从此行开始复制修改对应的标签
- localhost
labels:
job: web-test # 监控类型
project: test-api-log # 项目名称自定义
host: 192.168.2.81 # 建议修改为本机ip,方便过滤
__path__: /data/log/*.log # tomcat日志路径

# 启动 promtail
cd /data/promtail
nohup ./promtail-linux-amd64 --config.file=promtail.yaml &

loki 部署

下载地址

# 解压,下载官方配置模板并修改
mkdir /data/loki
unzip loki-linux-amd64
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml

# 编辑配置
vim loki-local-config.yaml

auth_enabled: false

server:
http_listen_port: 3100
grpc_listen_port: 9096

common:
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory

schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h

# 告警先不配置
# ruler:
# alertmanager_url: http://localhost:9093

# 下面的配置为新增的,不配置日志太大会报错
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_mb: 30 #修改每用户摄入速率限制,即每秒样本量,默认值为4M
ingestion_burst_size_mb: 15 #修改每用户摄入速率限制,即每秒样本量,默认值为6M


# 启动 loki
cd /data/loki
nohup ./loki-linux-amd64 --config.file=loki.yaml &

配置 grafana

1、配置 loki 数据源

2、输入loki服务器的ip和端口(3100)、其他默认,然后Save&Test

3、在Explore中选择loki,可以根据自定义的标签进行过滤

4、显示日志