Skip to content

Commit 7ca1792

Browse files
yyyangwcremeywang
authored and
cremeywang
committed
增加gunicorn架构上报指标配置
1 parent f5d8d18 commit 7ca1792

File tree

10 files changed

+231
-22
lines changed

10 files changed

+231
-22
lines changed

helm-charts/tca/README.md

+26-21
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,13 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
201201
| `tca.web.logPath` | TCA Web nginx log path | `/var/log/nginx` |
202202
203203
### TCA Main configuration parameters
204-
| Name | Description | Value |
205-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
206-
| `tca.main.image.repository` | TCA Main image repository | `tencenttca/tca-main` |
207-
| `tca.main.image.tag` | TCA Main image tag | `latest` |
208-
| `tca.main.server.processnum` | TCA Main server process num | `8` |
209-
| `tca.main.worker.num` | TCA Main worker num for async starting analysis and handle periodic task | `2` |
204+
| Name | Description | Value |
205+
| -------------------------------------------- | ------------------------------------------------------------------------ |-----------------------|
206+
| `tca.main.image.repository` | TCA Main image repository | `tencenttca/tca-main` |
207+
| `tca.main.image.tag` | TCA Main image tag | `latest` |
208+
| `tca.main.server.processnum` | TCA Main server process num | `8` |
209+
| `tca.main.worker.num` | TCA Main worker num for async starting analysis and handle periodic task | `2` |
210+
| `tca.main.server.multiprocDir` | TCA Main server storing monitoring indicator data path | `multiproc-tmp` |
210211
211212
#### TCA Main setting configuration
212213
| Name | Description | Value |
@@ -226,12 +227,14 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
226227
227228
228229
### TCA Analysis Configuration parameters
229-
| Name | Description | Value |
230-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
231-
| `tca.analysis.image.repository` | TCA Analysis image repository | `tencenttca/tca-analysis` |
232-
| `tca.analysis.image.tag` | TCA Analysis image tag | `latest` |
233-
| `tca.analysis.server.processnum` | TCA Analysis server process num | `8` |
234-
| `tca.analysis.worker.num` | TCA Analysis worker num for async saving lint and metric data | `2` |
230+
| Name | Description | Value |
231+
|----------------------------------------------|---------------------------------------------------------------|---------------------------|
232+
| `tca.analysis.image.repository` | TCA Analysis image repository | `tencenttca/tca-analysis` |
233+
| `tca.analysis.image.tag` | TCA Analysis image tag | `latest` |
234+
| `tca.analysis.server.processnum` | TCA Analysis server process num | `8` |
235+
| `tca.analysis.worker.num` | TCA Analysis worker num for async saving lint and metric data | `2` |
236+
| `tca.analysis.server.multiprocDir` | TCA Analysis server storing monitoring indicator data path | `multiproc-tmp` |
237+
235238
236239
#### TCA Analysis setting configuration
237240
| Name | Description | Value |
@@ -249,11 +252,12 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
249252
250253
251254
### TCA Login Configuration parameters
252-
| Name | Description | Value |
253-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
254-
| `tca.login.image.repository` | TCA Login image repository | `tencenttca/tca-login` |
255-
| `tca.login.image.tag` | TCA Login image tag | `latest` |
256-
| `tca.login.server.processnum` | TCA Login server process num | `8` |
255+
| Name | Description | Value |
256+
|----------------------------------|----------------------------------------------------------|--------------------------|
257+
| `tca.login.image.repository` | TCA Login image repository | `tencenttca/tca-login` |
258+
| `tca.login.image.tag` | TCA Login image tag | `latest` |
259+
| `tca.login.server.processnum` | TCA Login server process num | `8` |
260+
| `tca.login.server.multiprocDir` | TCA Login server storing monitoring indicator data path | `multiproc-tmp` |
257261
258262
259263
#### TCA Login setting configuration
@@ -266,10 +270,11 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
266270
| `tca.login.settings.customDB.user` | TCA Login custom mysql server user | `""` |
267271
268272
### TCA File Configuration parameters
269-
| Name | Description | Value |
270-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
271-
| `tca.file.image.repository` | TCA file image repository | `tencenttca/tca-file` |
272-
| `tca.file.image.tag` | TCA file image tag | `latest` |
273+
| Name | Description | Value |
274+
|---------------------------------|---------------------------------------------------------|-----------------------|
275+
| `tca.file.image.repository` | TCA file image repository | `tencenttca/tca-file` |
276+
| `tca.file.image.tag` | TCA file image tag | `latest` |
277+
| `tca.file.server.multiprocDir` | TCA file server storing monitoring indicator data path | `multiproc-tmp` |
273278
274279
#### TCA File setting configuration
275280
| Name | Description | Value |

helm-charts/tca/templates/analysis/configmap.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ data:
1818
ANALYSIS_DEBUG_MODE: {{ .Values.tca.analysis.settings.base.debugMode | quote }}
1919
ANALYSIS_DB_NAME: {{ .Values.tca.analysis.settings.dbName }}
2020
ANALYSIS_REDIS_DBID: {{ .Values.tca.analysis.settings.redisDBId | quote }}
21+
MY_PROMETHEUS_MULTIPROC_DIR: {{ .Values.tca.analysis.server.multiprocDir }}
2122
# DB相关配置,优先使用 Values.tca.analysis.settings.customDB 配置,默认使用 tca.database
2223
ANALYSIS_DB_USER: {{ .Values.tca.analysis.settings.customDB.user | default ( include "tca.database.username" . ) }}
2324
ANALYSIS_DB_PASSWORD: {{ .Values.tca.analysis.settings.customDB.password | default ( include "tca.database.password" . ) }}

helm-charts/tca/templates/file/configmap-env.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ data:
2828
FILE_MINIO_ACCESS_KEY: {{ .Values.tca.file.settings.minio.accessKey | quote }}
2929
FILE_MINIO_SECRET_KEY: {{ .Values.tca.file.settings.minio.secretKey | quote }}
3030
FILE_DB_NAME: {{ .Values.tca.file.settings.dbName | quote }}
31+
MY_PROMETHEUS_MULTIPROC_DIR: {{ .Values.tca.file.server.multiprocDir }}
3132
# DB相关配置,优先使用 Values.tca.file.settings.customDB 配置,默认使用 tca.database
3233
FILE_DB_USER: {{ .Values.tca.file.settings.customDB.user | default ( include "tca.database.username" . ) }}
3334
FILE_DB_PASSWORD: {{ .Values.tca.file.settings.customDB.password | default ( include "tca.database.password" . ) }}

helm-charts/tca/templates/login/configmap.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ data:
1818
DJANGO_SETTINGS_MODULE: {{ .Values.tca.login.settings.base.module }}
1919
LOGIN_DEBUG_MODE: {{ .Values.tca.login.settings.base.debugMode | quote }}
2020
LOGIN_DB_NAME: {{ .Values.tca.login.settings.dbName }}
21+
MY_PROMETHEUS_MULTIPROC_DIR: {{ .Values.tca.login.server.multiprocDir }}
2122
# DB相关配置,优先使用 Values.tca.login.settings.customDB 配置,默认使用 tca.database
2223
LOGIN_DB_USER: {{ .Values.tca.login.settings.customDB.user | default ( include "tca.database.username" . ) }}
2324
LOGIN_DB_PASSWORD: {{ .Values.tca.login.settings.customDB.password | default ( include "tca.database.password" . ) }}

helm-charts/tca/templates/main/configmap.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ data:
2323
HTTPS_CLONE_FLAG: {{ .Values.tca.main.settings.base.httpsCloneFlag | quote }}
2424
MAIN_DB_NAME: {{ .Values.tca.main.settings.dbName }}
2525
MAIN_REDIS_DBID: {{ .Values.tca.main.settings.redisDBId | quote }}
26+
MY_PROMETHEUS_MULTIPROC_DIR: {{ .Values.tca.main.server.multiprocDir }}
2627
# DB相关配置,优先使用 Values.tca.main.settings.customDB 配置,默认使用 tca.database
2728
MAIN_DB_USER: {{ .Values.tca.main.settings.customDB.user | default ( include "tca.database.username" . ) }}
2829
MAIN_DB_PASSWORD: {{ .Values.tca.main.settings.customDB.password | default ( include "tca.database.password" . ) }}

helm-charts/tca/values.yaml

+9-1
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,12 @@ tca:
221221
##
222222
server:
223223
## @param tca.main.server.port A port for main server listening
224-
## @param tca.analysis.server.processNum The number of processes main server is running
224+
## @param tca.main.server.processNum The number of processes main server is running
225+
## @param tca.main.server.multiprocDir Path for storing monitoring indicator data
225226
##
226227
port: 80
227228
processNum: 8
229+
multiprocDir: "multiproc-tmp"
228230
resources:
229231
limits:
230232
cpu: "1000m"
@@ -333,9 +335,11 @@ tca:
333335
server:
334336
## @param tca.analysis.server.port A port for analysis server listening
335337
## @param tca.analysis.server.processNum The number of processes analysis server is running
338+
## @param tca.analysis.server.multiprocDir Path for storing monitoring indicator data
336339
##
337340
port: 80
338341
processNum: 8
342+
multiprocDir: "multiproc-tmp"
339343
resources:
340344
limits:
341345
cpu: "1000m"
@@ -430,9 +434,11 @@ tca:
430434
server:
431435
## @param tca.login.server.port A port for login server listening
432436
## @param tca.login.server.processNum The number of processes login server is running
437+
## @param tca.login.server.multiprocDir Path for storing monitoring indicator data
433438
##
434439
port: 80
435440
processNum: 8
441+
multiprocDir: "multiproc-tmp"
436442
resources:
437443
limits:
438444
cpu: "1000m"
@@ -493,9 +499,11 @@ tca:
493499
server:
494500
## @param tca.file.server.port A port for file server listening
495501
## @param tca.file.server.processNum The number of processes file server is running
502+
## @param tca.file.server.multiprocDir Path for storing monitoring indicator data
496503
##
497504
port: 8804
498505
processNum: 8
506+
multiprocDir: "multiproc-tmp"
499507
resources:
500508
limits:
501509
cpu: "1000m"

server/projects/analysis/analysis.gunicorn.conf.py

+48
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@
99
"""
1010
import os
1111

12+
13+
def on_starting(server):
14+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
15+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR')
16+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17+
multiproc_dir = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
18+
19+
try:
20+
if not os.path.exists(multiproc_dir):
21+
os.makedirs(multiproc_dir)
22+
except Exception:
23+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = BASE_DIR
24+
25+
26+
def post_fork(server, worker):
27+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
28+
try:
29+
from prometheus_client import values
30+
values.ValueClass = values.MultiProcessValue(os.getpid)
31+
except ImportError:
32+
pass
33+
34+
35+
def child_exit(server, worker):
36+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
37+
mark_all_process_dead(worker.pid)
38+
39+
40+
def mark_all_process_dead(pid, path=None):
41+
if path is None:
42+
path = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
43+
44+
try:
45+
from prometheus_client import Gauge
46+
import glob
47+
for mode in Gauge._MULTIPROC_MODES:
48+
for f in glob.glob(os.path.join(path, f'gauge_{mode}_{pid}.db')):
49+
os.remove(f)
50+
except ImportError:
51+
pass
52+
53+
try:
54+
os.remove(os.path.join(path, f'counter_{pid}.db'))
55+
os.remove(os.path.join(path, f'histogram_{pid}.db'))
56+
except Exception:
57+
pass
58+
59+
1260
project_path = os.path.dirname(os.path.abspath(__file__))
1361
host = os.environ.get("ANALYSIS_SERVER_HOST", "0.0.0.0")
1462
port = os.environ.get("ANALYSIS_SERVER_PORT", 8002)

server/projects/file/file.gunicorn.conf.py

+48
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@
99
"""
1010
import os
1111

12+
13+
def on_starting(server):
14+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
15+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR')
16+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17+
multiproc_dir = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
18+
19+
try:
20+
if not os.path.exists(multiproc_dir):
21+
os.makedirs(multiproc_dir)
22+
except Exception:
23+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = BASE_DIR
24+
25+
26+
def post_fork(server, worker):
27+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
28+
try:
29+
from prometheus_client import values
30+
values.ValueClass = values.MultiProcessValue(os.getpid)
31+
except ImportError:
32+
pass
33+
34+
35+
def child_exit(server, worker):
36+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
37+
mark_all_process_dead(worker.pid)
38+
39+
40+
def mark_all_process_dead(pid, path=None):
41+
if path is None:
42+
path = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
43+
44+
try:
45+
from prometheus_client import Gauge
46+
import glob
47+
for mode in Gauge._MULTIPROC_MODES:
48+
for f in glob.glob(os.path.join(path, f'gauge_{mode}_{pid}.db')):
49+
os.remove(f)
50+
except ImportError:
51+
pass
52+
53+
try:
54+
os.remove(os.path.join(path, f'counter_{pid}.db'))
55+
os.remove(os.path.join(path, f'histogram_{pid}.db'))
56+
except Exception:
57+
pass
58+
59+
1260
project_path = os.path.dirname(os.path.abspath(__file__))
1361
host = os.environ.get("FILE_SERVER_HOST", "0.0.0.0")
1462
port = os.environ.get("FILE_SERVER_PORT", 8804)

server/projects/login/login.gunicorn.conf.py

+48
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@
99
"""
1010
import os
1111

12+
13+
def on_starting(server):
14+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
15+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR')
16+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17+
multiproc_dir = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
18+
19+
try:
20+
if not os.path.exists(multiproc_dir):
21+
os.makedirs(multiproc_dir)
22+
except Exception:
23+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = BASE_DIR
24+
25+
26+
def post_fork(server, worker):
27+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
28+
try:
29+
from prometheus_client import values
30+
values.ValueClass = values.MultiProcessValue(os.getpid)
31+
except ImportError:
32+
pass
33+
34+
35+
def child_exit(server, worker):
36+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
37+
mark_all_process_dead(worker.pid)
38+
39+
40+
def mark_all_process_dead(pid, path=None):
41+
if path is None:
42+
path = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
43+
44+
try:
45+
from prometheus_client import Gauge
46+
import glob
47+
for mode in Gauge._MULTIPROC_MODES:
48+
for f in glob.glob(os.path.join(path, f'gauge_{mode}_{pid}.db')):
49+
os.remove(f)
50+
except ImportError:
51+
pass
52+
53+
try:
54+
os.remove(os.path.join(path, f'counter_{pid}.db'))
55+
os.remove(os.path.join(path, f'histogram_{pid}.db'))
56+
except Exception:
57+
pass
58+
59+
1260
project_path = os.path.dirname(os.path.abspath(__file__))
1361
host = os.environ.get("LOGIN_SERVER_HOST", "0.0.0.0")
1462
port = os.environ.get("LOGIN_SERVER_PORT", 8003)

server/projects/main/main.gunicorn.conf.py

+48
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,54 @@
99
"""
1010
import os
1111

12+
13+
def on_starting(server):
14+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
15+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR')
16+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17+
multiproc_dir = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
18+
19+
try:
20+
if not os.path.exists(multiproc_dir):
21+
os.makedirs(multiproc_dir)
22+
except Exception:
23+
os.environ['PROMETHEUS_MULTIPROC_DIR'] = BASE_DIR
24+
25+
26+
def post_fork(server, worker):
27+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
28+
try:
29+
from prometheus_client import values
30+
values.ValueClass = values.MultiProcessValue(os.getpid)
31+
except ImportError:
32+
pass
33+
34+
35+
def child_exit(server, worker):
36+
if os.environ.get('MY_PROMETHEUS_MULTIPROC_DIR', None):
37+
mark_all_process_dead(worker.pid)
38+
39+
40+
def mark_all_process_dead(pid, path=None):
41+
if path is None:
42+
path = os.environ.get('PROMETHEUS_MULTIPROC_DIR')
43+
44+
try:
45+
from prometheus_client import Gauge
46+
import glob
47+
for mode in Gauge._MULTIPROC_MODES:
48+
for f in glob.glob(os.path.join(path, f'gauge_{mode}_{pid}.db')):
49+
os.remove(f)
50+
except ImportError:
51+
pass
52+
53+
try:
54+
os.remove(os.path.join(path, f'counter_{pid}.db'))
55+
os.remove(os.path.join(path, f'histogram_{pid}.db'))
56+
except Exception:
57+
pass
58+
59+
1260
project_path = os.path.dirname(os.path.abspath(__file__))
1361
host = os.environ.get("MAIN_SERVER_HOST", "0.0.0.0")
1462
port = os.environ.get("MAIN_SERVER_PORT", 8001)

0 commit comments

Comments
 (0)