This is an automated email from the ASF dual-hosted git repository. kezhenxu94 pushed a commit to branch feature/configs in repository https://gitbox.apache.org/repos/asf/skywalking-python.git
commit 5ccc7f667ca96bfebde3b705d091ae815cc42238 Author: kezhenxu94 <[email protected]> AuthorDate: Sun May 10 13:05:52 2020 +0800 Feature: logging level and disabling plugins - Add logging level configuration item - Add plugin disabling mechanism - Some trivial chores --- Makefile | 7 +++++-- README.md | 15 ++++++++++----- docs/FAQ.md | 12 ++++++++++++ setup.py | 4 +++- skywalking/__init__.py | 4 ---- skywalking/agent/__init__.py | 2 ++ skywalking/config/__init__.py | 5 ++++- skywalking/loggings/__init__.py | 5 ++--- skywalking/plugins/__init__.py | 11 +++++++++++ tests/consumer.py | 6 +++++- tests/provider.py | 1 + 11 files changed, 55 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 56f4369..3d4947d 100644 --- a/Makefile +++ b/Makefile @@ -19,10 +19,9 @@ setup: python3 -m pip install --upgrade pip python3 -m pip install grpcio --ignore-installed - python3 -m pip install grpcio-tools - python3 -m pip install flake8 gen: + python3 -m grpc_tools.protoc --version || python3 -m pip install grpcio-tools python3 -m grpc_tools.protoc -I protocol --python_out=. --grpc_python_out=. protocol/**/*.proto touch browser/__init__.py touch common/__init__.py @@ -32,6 +31,7 @@ gen: touch service_mesh_probe/__init__.py lint: clean + flake8 --version || python3 -m pip install flake8 flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics @@ -44,6 +44,9 @@ test: gen install: gen python3 setup.py install --force +package: clean gen + python3 setup.py sdist bdist_wheel + clean: rm -rf browser common language_agent management profile service_mesh_probe rm -rf skywalking_python.egg-info dist build diff --git a/README.md b/README.md index 2d036bc..a68a394 100644 --- a/README.md +++ b/README.md @@ -30,11 +30,12 @@ The supported environment variables are as follows: Environment Variable | Description | Default | :--- | :--- | :--- | -| `SW_AGENT_NAME` | The name of the Python service | `Python Service Name` -| `SW_AGENT_INSTANCE` | The name of the Python service instance | Randomly generated -| `SW_AGENT_COLLECTOR_BACKEND_SERVICES` | The backend OAP server address | `127.0.0.1:11800` -| `SW_AGENT_PROTOCOL` | The protocol to communicate with the backend OAP, currently only `grpc` is supported | `grpc` -| `SW_LOGGING_LEVEL` | The logging level | `INFO` | +| `SW_AGENT_NAME` | The name of the Python service | `Python Service Name` | +| `SW_AGENT_INSTANCE` | The name of the Python service instance | Randomly generated | +| `SW_AGENT_COLLECTOR_BACKEND_SERVICES` | The backend OAP server address | `127.0.0.1:11800` | +| `SW_AGENT_PROTOCOL` | The protocol to communicate with the backend OAP, currently only `grpc` is supported | `grpc` | +| `SW_AGENT_LOGGING_LEVEL` | The logging level, could be one of `CRITICAL`, `FATAL`, `ERROR`, `WARN`(`WARNING`), `INFO`, `DEBUG` | `INFO` | +| `SW_AGENT_DISABLE_PLUGINS` | The name patterns in CSV pattern, plugins whose name matches one of the pattern won't be installed | `''` | ## Supported Libraries @@ -96,5 +97,9 @@ with context.new_entry_span(op=str('https://github.com/apache/skywalking')) as s some_method() ``` +## FAQs + +Check [the FAQ page](docs/FAQ.md) or add the FAQs there. + ## License Apache 2.0 diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000..4e0b263 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,12 @@ +## FAQ + +Q: How to disable some plugins? +A: You can disable one or more plugins by following methods. + +```python +from skywalking import config + +config.disable_plugins = ['sw_http', 'sw_request'] # can be also CSV format, i.e. 'sw_http,sw_request' +``` + +you can also disable the plugins via environment variables `SW_AGENT_DISABLE_PLUGINS`. diff --git a/setup.py b/setup.py index 0370c9d..958886d 100644 --- a/setup.py +++ b/setup.py @@ -35,5 +35,7 @@ setup( license="Apache 2.0", packages=find_packages(exclude=("tests",)), include_package_data=True, - install_requires=[], + install_requires=[ + "grpcio", + ], ) diff --git a/skywalking/__init__.py b/skywalking/__init__.py index 8848423..1dd5b45 100644 --- a/skywalking/__init__.py +++ b/skywalking/__init__.py @@ -20,10 +20,6 @@ from collections import namedtuple from enum import Enum from typing import List -from skywalking import loggings - -loggings.init() - class Component(Enum): Unknown = 0 diff --git a/skywalking/agent/__init__.py b/skywalking/agent/__init__.py index ce410ad..2271665 100644 --- a/skywalking/agent/__init__.py +++ b/skywalking/agent/__init__.py @@ -69,6 +69,8 @@ def start(): global __started if __started: raise RuntimeError('the agent can only be started once') + from skywalking import loggings + loggings.init() __started = True __init() __heartbeat_thread.start() diff --git a/skywalking/config/__init__.py b/skywalking/config/__init__.py index 6fd2823..ffd3fd0 100644 --- a/skywalking/config/__init__.py +++ b/skywalking/config/__init__.py @@ -17,12 +17,15 @@ import os import uuid +from typing import List service_name = os.getenv('SW_AGENT_NAME') or 'Python Service Name' # type: str service_instance = os.getenv('SW_AGENT_INSTANCE') or str(uuid.uuid1()).replace('-', '') # type: str collector_address = os.getenv('SW_AGENT_COLLECTOR_BACKEND_SERVICES') or '127.0.0.1:11800' # type: str protocol = os.getenv('SW_AGENT_PROTOCOL') or 'grpc' # type: str -authentication = os.getenv('SW_AGENT_AUTHENTICATION') +authentication = os.getenv('SW_AGENT_AUTHENTICATION') # type: str +logging_level = os.getenv('SW_AGENT_LOGGING_LEVEL') or 'INFO' # type: str +disable_plugins = (os.getenv('SW_AGENT_DISABLE_PLUGINS') or '').split(',') # type: List[str] def init( diff --git a/skywalking/loggings/__init__.py b/skywalking/loggings/__init__.py index 1ba3646..35fc16d 100644 --- a/skywalking/loggings/__init__.py +++ b/skywalking/loggings/__init__.py @@ -16,13 +16,12 @@ # import logging -import os -__logging_lever = (os.getenv('SW_LOGGING_LEVEL') or 'INFO').upper() +from skywalking import config def init(): logging.basicConfig( - level=logging.getLevelName(__logging_lever), + level=logging.getLevelName(config.logging_level), format='%(name)-32s [%(threadName)-15s] [%(levelname)-8s] %(message)s', ) diff --git a/skywalking/plugins/__init__.py b/skywalking/plugins/__init__.py index d22d1bc..3995f1d 100644 --- a/skywalking/plugins/__init__.py +++ b/skywalking/plugins/__init__.py @@ -17,6 +17,9 @@ import inspect import logging import pkgutil +import re + +from skywalking import config import skywalking @@ -25,6 +28,14 @@ logger = logging.getLogger(__name__) def install(): for importer, modname, ispkg in pkgutil.iter_modules(skywalking.plugins.__path__): + disable_patterns = config.disable_plugins + if isinstance(disable_patterns, str): + disable_patterns = [re.compile(p.strip()) for p in disable_patterns.split(',') if p.strip()] + else: + disable_patterns = [re.compile(p.strip()) for p in disable_patterns if p.strip()] + if any(pattern.match(modname) for pattern in disable_patterns): + logger.info('plugin %s is disabled and thus won\'t be installed', modname) + continue logger.debug('installing plugin %s', modname) plugin = importer.find_module(modname).load_module(modname) if not hasattr(plugin, 'install') or inspect.ismethod(getattr(plugin, 'install')): diff --git a/tests/consumer.py b/tests/consumer.py index a40c1b6..d874f6c 100644 --- a/tests/consumer.py +++ b/tests/consumer.py @@ -15,23 +15,27 @@ # limitations under the License. # +import os from urllib import request from skywalking import agent, config if __name__ == '__main__': config.service_name = 'consumer' + config.logging_level = 'DEBUG' agent.start() import socketserver from http.server import BaseHTTPRequestHandler + provider_url = os.getenv('PROVIDER_URL') or 'http://localhost:9091/' + class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() - req = request.Request('http://localhost:9091/whatever') + req = request.Request(provider_url + '/whatever') with request.urlopen(req) as res: self.wfile.write(res.read(300)) diff --git a/tests/provider.py b/tests/provider.py index c13eca0..afa7bb7 100644 --- a/tests/provider.py +++ b/tests/provider.py @@ -21,6 +21,7 @@ from skywalking import agent, config if __name__ == '__main__': config.service_name = 'provider' + config.logging_level = 'DEBUG' agent.start() import socketserver
