mirror of
https://github.com/camptocamp/odoo-cloud-platform.git
synced 2026-06-24 02:08:36 +00:00
monitoring_log_requests: Improve data output
* Add environment var to enable/disable requests log * Add ability to send data to an UDP listener instead of stdout
This commit is contained in:
@@ -6,7 +6,14 @@ Monitoring: Requests Logging
|
||||
|
||||
This addon is used to output in the logs informations about the user's
|
||||
requests. Data such as *what* is the request, *who* requested it and *how
|
||||
much* time did it took to complete could then be extracted from the logs and
|
||||
much* time did it took to complete.
|
||||
|
||||
The requests logging is activated with the environment variable `ODOO_REQUESTS_LOGGING` set to `1`.
|
||||
|
||||
Data output
|
||||
###########
|
||||
|
||||
The data could then be extracted from the logs and
|
||||
loaded in an analysis tool such as ElasticSearch/Kibana.
|
||||
|
||||
Each log line is a JSON with the monitored fields, so it is easier to parse.
|
||||
@@ -15,3 +22,8 @@ The logs are prefixed with ``monitoring.http.requests`` so be sure to enable
|
||||
this path in the log handler::
|
||||
|
||||
- LOG_HANDLER=":WARNING,monitoring.http.requests:INFO"
|
||||
|
||||
It is also possible to send the data directly to an UDP listener without
|
||||
outputting anything to the logs to avoid flooding on busy instances.
|
||||
To do so, use the environment variable `ODOO_REQUESTS_LOGGING_UDP`
|
||||
set to a value like `<address>:<port>` (`address` can be an IP or a domain).
|
||||
@@ -1,2 +1,3 @@
|
||||
|
||||
from . import utils
|
||||
from . import models
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
|
||||
from . import ir_http
|
||||
from ..utils import is_enabled
|
||||
|
||||
if is_enabled():
|
||||
from . import ir_http
|
||||
|
||||
@@ -2,15 +2,28 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
import json
|
||||
import logging
|
||||
import time
|
||||
from os import environ
|
||||
|
||||
from odoo import models
|
||||
from odoo.http import request as http_request
|
||||
from odoo.tools.config import config
|
||||
|
||||
udp_dest = environ.get('ODOO_REQUESTS_LOGGING_UDP')
|
||||
if udp_dest:
|
||||
import socket
|
||||
import atexit
|
||||
|
||||
_logger = logging.getLogger('monitoring.http.requests')
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
|
||||
atexit.register(sock.close)
|
||||
ip, port = udp_dest.split(':')
|
||||
|
||||
def output_method(data):
|
||||
sock.sendto(data.encode('utf-8'), (ip, port))
|
||||
else:
|
||||
import logging
|
||||
_logger = logging.getLogger('monitoring.http.requests')
|
||||
output_method = _logger.info
|
||||
|
||||
|
||||
class IrHttp(models.AbstractModel):
|
||||
@@ -80,4 +93,4 @@ class IrHttp(models.AbstractModel):
|
||||
|
||||
@classmethod
|
||||
def _monitoring_log(cls, info):
|
||||
_logger.info(json.dumps(info))
|
||||
output_method(json.dumps(info))
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# Copyright 2020 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
from distutils.util import strtobool
|
||||
from os import environ
|
||||
|
||||
|
||||
def is_enabled():
|
||||
env_val = environ.get('ODOO_REQUESTS_LOGGING')
|
||||
return bool(strtobool(env_val or '0'.lower()))
|
||||
Reference in New Issue
Block a user