Skip to content

Commit 49c4435

Browse files
authored
Merge pull request #1160 from yyyangw/feature/gunicorn_update
增加gunicorn架构上报指标配置
2 parents 2fbad7e + 7ca1792 commit 49c4435

File tree

10 files changed

+231
-22
lines changed

10 files changed

+231
-22
lines changed

Diff for: helm-charts/tca/README.md

+26-21
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,13 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
206206
| `tca.web.logPath` | TCA Web nginx log path | `/var/log/nginx` |
207207
208208
### TCA Main configuration parameters
209-
| Name | Description | Value |
210-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
211-
| `tca.main.image.repository` | TCA Main image repository | `tencenttca/tca-main` |
212-
| `tca.main.image.tag` | TCA Main image tag | `latest` |
213-
| `tca.main.server.processnum` | TCA Main server process num | `8` |
214-
| `tca.main.worker.num` | TCA Main worker num for async starting analysis and handle periodic task | `2` |
209+
| Name | Description | Value |
210+
| -------------------------------------------- | ------------------------------------------------------------------------ |-----------------------|
211+
| `tca.main.image.repository` | TCA Main image repository | `tencenttca/tca-main` |
212+
| `tca.main.image.tag` | TCA Main image tag | `latest` |
213+
| `tca.main.server.processnum` | TCA Main server process num | `8` |
214+
| `tca.main.worker.num` | TCA Main worker num for async starting analysis and handle periodic task | `2` |
215+
| `tca.main.server.multiprocDir` | TCA Main server storing monitoring indicator data path | `multiproc-tmp` |
215216
216217
#### TCA Main setting configuration
217218
| Name | Description | Value |
@@ -231,12 +232,14 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
231232
232233
233234
### TCA Analysis Configuration parameters
234-
| Name | Description | Value |
235-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
236-
| `tca.analysis.image.repository` | TCA Analysis image repository | `tencenttca/tca-analysis` |
237-
| `tca.analysis.image.tag` | TCA Analysis image tag | `latest` |
238-
| `tca.analysis.server.processnum` | TCA Analysis server process num | `8` |
239-
| `tca.analysis.worker.num` | TCA Analysis worker num for async saving lint and metric data | `2` |
235+
| Name | Description | Value |
236+
|----------------------------------------------|---------------------------------------------------------------|---------------------------|
237+
| `tca.analysis.image.repository` | TCA Analysis image repository | `tencenttca/tca-analysis` |
238+
| `tca.analysis.image.tag` | TCA Analysis image tag | `latest` |
239+
| `tca.analysis.server.processnum` | TCA Analysis server process num | `8` |
240+
| `tca.analysis.worker.num` | TCA Analysis worker num for async saving lint and metric data | `2` |
241+
| `tca.analysis.server.multiprocDir` | TCA Analysis server storing monitoring indicator data path | `multiproc-tmp` |
242+
240243
241244
#### TCA Analysis setting configuration
242245
| Name | Description | Value |
@@ -254,11 +257,12 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
254257
255258
256259
### TCA Login Configuration parameters
257-
| Name | Description | Value |
258-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
259-
| `tca.login.image.repository` | TCA Login image repository | `tencenttca/tca-login` |
260-
| `tca.login.image.tag` | TCA Login image tag | `latest` |
261-
| `tca.login.server.processnum` | TCA Login server process num | `8` |
260+
| Name | Description | Value |
261+
|----------------------------------|----------------------------------------------------------|--------------------------|
262+
| `tca.login.image.repository` | TCA Login image repository | `tencenttca/tca-login` |
263+
| `tca.login.image.tag` | TCA Login image tag | `latest` |
264+
| `tca.login.server.processnum` | TCA Login server process num | `8` |
265+
| `tca.login.server.multiprocDir` | TCA Login server storing monitoring indicator data path | `multiproc-tmp` |
262266
263267
264268
#### TCA Login setting configuration
@@ -271,10 +275,11 @@ Helm will deploy `mariadb` by default. Reference: [bitnami/mariadb](https://gith
271275
| `tca.login.settings.customDB.user` | TCA Login custom mysql server user | `""` |
272276
273277
### TCA File Configuration parameters
274-
| Name | Description | Value |
275-
| -------------------------------------------- | ------------------------------------------------------------------------ | ------------------------- |
276-
| `tca.file.image.repository` | TCA file image repository | `tencenttca/tca-file` |
277-
| `tca.file.image.tag` | TCA file image tag | `latest` |
278+
| Name | Description | Value |
279+
|---------------------------------|---------------------------------------------------------|-----------------------|
280+
| `tca.file.image.repository` | TCA file image repository | `tencenttca/tca-file` |
281+
| `tca.file.image.tag` | TCA file image tag | `latest` |
282+
| `tca.file.server.multiprocDir` | TCA file server storing monitoring indicator data path | `multiproc-tmp` |
278283
279284
#### TCA File setting configuration
280285
| Name | Description | Value |

Diff for: 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" . ) }}

Diff for: 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" . ) }}

Diff for: 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" . ) }}

Diff for: 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" . ) }}

Diff for: 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"

Diff for: 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)

Diff for: 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)

Diff for: 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)

Diff for: 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)