Skip to content

Latest commit

 

History

History
463 lines (325 loc) · 19.7 KB

CHANGELOG.asciidoc

File metadata and controls

463 lines (325 loc) · 19.7 KB
Note
Release notes are best read in our documentation at elastic.co

Unreleased

Python Agent version 5.x

v5.3.1

New Features
  • Added support for shortening dicts in local variables {pull}638[#638]

v5.3.0

New Features
  • Added instrumentation for mysql-connector and pymysql {pull}603[#603]

  • Implemented stack_trace_limit configuration option {pull}623[#623]

  • Autoinsert tracing middleware in django settings {pull}625[#625]

Bug fixes
  • Fixed issue with transactions not being captured when errors occur in Flask {pull}635[#635]

v5.2.3

Bug fixes
  • Ensure that metrics with value 0 are not collected if they have the reset_on_collect flag set {pull}615[#615]

  • Unwrap postgres cursor for newly introduced psycopg2 extensions {pull}621[#621]

  • Fix pod ID for kubernetes when using the systemd cgroup driver {pull}631[#631]

v5.2.2

Bug fixes
  • Fixed an issue where a cpu_total of 0 could cause an exception {pull}610[#610], {pull}611[#611]

v5.2.1

Bug fixes
  • Fixed an issue with DroppedSpans and logging integration {pull}602[#602]

  • Fixed an issue with processors not being applied to chained exceptions {pull}604[#604]

v5.2.0

New Features
  • Added automatic tagging of LogRecord objects with transaction, trace, and span IDs via a LogRecordFactory (Python 3.2+) {pull}520[#520], {pull}586[#586]

  • Added logging filter and record factory for adding transaction, trace, and span IDs {pull}520[#520], {pull}586[#586]

  • Added structlog processor for adding transaction, trace, and span IDs {pull}520[#520], {pull}586[#586]

  • Added new public API calls for getting transaction, trace, and span IDs {pull}520[#520], {pull}586[#586]

  • Added support for chained exceptions in Python 3 {pull}596[#596]. Note that chained exceptions will be captured and stored in Elasticsearch, but not yet visualized in the APM UI. The UI component will be released in an upcoming Kibana release (7.5 or later).

  • Added support for using structlog for agent logging {pull}591[#591]

Bug fixes
  • Drop events immediately if a processor returns a falsy value {pull}585[#585]

v5.1.2

Bugfixes
  • Fixed an issue with http server_url and 'VERIFY_SERVER_CERT': False {pull}570[#570], {pull}578[#578]

  • Fixed instrumenting of psycopg2 when using their context manager interface {pull}577[#577], {pull}580[#580]

  • Fixed zerorpc tests {pull}581[#581]

  • Fixed to correctly check if gevent has patched threading.local {pull}579[#579]

v5.1.1

Bug fixes
  • Fixed an issue with empty responses from APM Server’s config endpoint {pull}562[#562], {pull}563[#563]

  • Fixed Windows tests by avoiding time.sleep in breakdown metrics tests {pull}537[#537], {pull}550[#550]

  • Fixed container ID matching to match CloudFoundry Garden container IDs {pull}523[#523], {pull}564[#564]

  • Fixed an issue in the urllib instrumentation if no port is set {pull}567[#567]

Other
  • Added Python 3.8 RC to the test matrix {pull}565[#565]

v5.1.0

Security issues
  • This release fixes CVE-2019-7617

New Features
  • Added support for global labels which will be applied to every transaction/error/metric {pull}549[#549]

  • Added support for NO_PROXY environment variable {pull}458[#458], {pull}551[#551]

Bugfixes
  • Fixed an issue with using callables in set_context with unsampled transactions {pull}541[#541], {pull}542[#542]

  • Limited the length of error.culprit to 1024 characters {pull}491[#491], {pull}543[#543]

  • Fixed an issue with the instrument config option {pull}546[#546], {pull}547[#547]

  • Limited the amount of distinct metrics to 1000 {pull}540[#540], {pull}544[#544]

v5.0.0

Breaking changes
  • Implemented type/subtype/action hierachy for spans. Ensure that you run at least APM Server 6.6 {pull}377[#377]

  • renamed tags to labels and changed API. The old API remains for backwards compatibility until 6.0 of the agent {pull}538[#538]

Other changes
  • Added support for recording breakdown metrics {pull}535[#535]

  • Added support for central config management {pull}511[#511]

  • Added instrumentation for urllib2 (Python 2) / urllib.request (Python 3) {pull}464[#464]

  • Added disable_metrics setting {pull}399[#399]

  • Updated elasticsearch instrumentation for 7.x {pull}482[#482], {pull}483[#483]

  • Fixed an issue with opentracing-python 2.1 {pull}471[#471]

  • Fixed an issue with certificate pinning {pull}497[#497]

  • Lowered log level of transport success messages {pull}527[#527], {pull}531[#531]

Python Agent version 4.x

v4.2.2

  • Fixed an issue with Celery and the prefork worker pool {pull}444[#444]

  • Fixed an issue when running uwsgi without a master process {pull}446[#446]

  • Fixed an issue with gevent/eventlet on Python 3.7 {pull}451[#451], {pull}454[#454]

  • Introduced IntervalTimer and use it instead of threading.Timer {pull}452[#452]

  • Added license header check as pre-commit hook {pull}456[#456]

v4.2.1

  • Fixed an issue with the certificate pinning feature introduced in 4.2.0 {pull}433[#433], {pull}434[#434]

  • Fixed incompatibility with eventlet introduced in 4.2.0 {pull}435[#435], {pull}436[#436]

v4.2.0

  • Implemented a new transport queue, which should avoid certain deadlock scenarios {pull}411[#411]

  • Implemented server certificate pinning {pull}405[#405]

  • Moved context.url to context.http.url for requests/urllib3 spans {pull}393[#393], {pull}394[#394]

  • Added support for using route as transaction name in Django 2.2+ {pull}86[#86], {pull}396[#396]

  • Added some randomness to time between requests to APM Server {pull}426[#426]

  • Fixed an issue with custom user models in Django using non-string usernames {pull}397[#397], {pull}398[#398]

  • Fixed an issue with sending kubernetes metadata to the API {pull}401[#401], {pull}402[#402]

  • Fixed an issue with parsing /proc/stat in RHEL/centos 6 {pull}406[#406], {pull}407[#407]

  • Added copyright header to all files, and a CI check {pull}429[#429]

v4.1.0

  • Added support for collecting system and process metrics {pull}361[#361]

  • Added an OpenTracing bridge {pull}388[#388]

  • Added transaction.sampled to errors {pull}371[#371]

  • Added transaction.type to errors {pull}391[#391]

  • Added parsing of /proc/self/cgroup to capture container meta data {pull}352[#352]

  • Added option to configure logging for Flask using a log level {pull}344[#344]

  • Added capture_headers config option {pull}392[#392]

v4.0.3

  • Implemented de-dotting of tag names and context keys {pull}353[#353]

  • wrote a quickfix for the boto3/botocore instrumentation {pull}367[#367]

  • Fixed an issue with psycopg2 and encoded strings {pull}366[#366]

v4.0.2

  • Fixed another issue in the new v2 transport {pull}351[#351]

v4.0.1

  • Fixed an issue with instrumenting redis-py 3.0+

  • Fixed a multithreading issue that occurs when using threaded workers {pull}335[#335]

v4.0.0

BREAKING Version 4 of the agent implements a new wire protocol for communicating with the APM Server. This format is only supported in APM Server 6.5+.

Further breaking changes:

  • The undocumented AsyncioHTTPTransport has been removed.

  • The flush_interval and max_queue_size settings have been removed.

  • new settings introduced: api_request_time and api_request_size.

  • Some settings now require a unit for duration or size. See documentation on configuration for more information.

  • The option to provide a custom date for exceptions and messages has been removed.

Other changes: * on Python 3.7, use contextvars instead of threadlocals for storing current transaction and span. This is a necessary precursor for full asyncio support. {pull}291[#291]

Python Agent version 3.x

v3.0.2

  • Fixed an issue with detecting names of wrapped functions that are partials {pull}294[#294]

  • Fixed a bug in Flask instrumentation that could appear together with FlaskAPI {pull}286[#286]

v3.0.1

  • Added sanitization for Set-Cookie response headers {pull}264[#264]

  • Added instrumentation for the non-standard Connection.execute() method for SQLite3 {pull}271[#271]

  • Added "authorization" to list of sensitive keywords, to ensure that "Authorization" HTTP headers are properly sanitized {pull}275[#275]

  • Taught the Logbook handler how to handle the stack=False option {pull}278[#278]

  • Fixed a race condition with managing the timer-send thread {pull}279[#279]

v3.0.0

  • adapted "black" code formatter for this repository {pull}262[#262]

  • BREAKING: dropped support for Python 3.3 {pull}242[#242]

  • BREAKING: changed order of precedence when evaluating configuration {pull}255[#255], {pull}261[#261]

  • BREAKING: changed default value of span_frames_min_duration setting from -1 (always collect) to 5 (only collect for spans longer than 5 ms) {pull}243[#243]

  • added instrumentation for pymssql {pull}241[#241]

  • added instrumentation for pyodbc {pull}238[#238]

Python Agent version 2.x

v2.2.1

  • fixed an issue with Django Channels {pull}232[#232], {pull}233[#233]

v2.2.0

  • introduced consistent logger name scheme for all elasticapm internal log messages {pull}212[#212]

  • added instrumentation of cassandra-driver {pull}205[#205]

  • added instrumentation of elasticsearch-py {pull}191[#191]

  • added Flask 1.0 to the test matrix {pull}207[#207]

  • fixed an issue with our minimalistic SQL parser and "fully qualified" table names {pull}206[#206]

  • fixed issue with spans in Django’s StreamingHTTPResponse not being captured {pull}201[#201], {pull}202[#202]

  • fixed issue with spans with Flask’s streaming response not being captured {pull}201[#201], {pull}202[#202]

NOTE: This will be the last release with support for Python 3.3.

v2.1.1

  • fixed bug in Django management command that would be triggered on Django 1.10 or 1.11 while using the MIDDLEWARE_CLASSES setting {pull}186[#186], {pull}187[#187]

  • fix an encoding issue with log messages that are hit in rare cases {pull}188[#188], {pull}189[#189]

v2.1.0

  • made skipping of initial elasticapm frames for span stack traces more generic {pull}167[#167]

  • added context.process.ppid field (supported in apm-server 6.3+) {pull}168[#168]

  • added option to disable stack frame collection for very short spans {pull}142[#142]

  • several bug fixes:

  • fix an issue in boto3 instrumentation with nonstandard endpoint URLs {pull}178[#178]

  • fix bug with OPTIONS requests and body capturing {pull}174[#174]

  • fix issue when message has % character, but no params {pull}175[#175]

v2.0.1

  • fixed compatibility issue with aiohttp 3.0 {pull}157[#157]

  • Added truncation for fields that have a maxLength in the JSON Schema {pull}159[#159]

v2.0.0

  • moved the library-frame detection from a processor to the stacktrace collection {pull}113[#113].

  • added settings to enable/disable source code collection and local variables collection for errors and transactions {pull}117[#117]

  • added service.environment to provide an environment name (e.g. "production", "staging") {pull}123[#123]

  • added transaction.id to errors to better correlate errors with transactions {pull}122[#122]

  • added transaction_sample_rate to define a rate with which transactions are sampled {pull}116[#116]

  • added error.handled to indicate if an exception was handled or not {pull}124[#124].

  • added transaction_max_spans setting to limit the amount of spans that are recorded per transaction {pull}127[#127]

  • added configuration options to limit captured local variables to a certain length {pull}130[#130]

  • added options for configuring the amount of context lines that are captured with each frame {pull}136[#136]

  • added support for tracing queries formatted as psycopg2.sql.SQL objects {pull}148[#148]

  • switched to time.perf_counter as timing function on Python 3 {pull}138[#138]

  • added option to disable capturing of request body {pull}151[#151]

  • BREAKING: Several settings and APIs have been renamed (#111, #119, #143):

  • The decorator for custom instrumentation, elasticapm.trace, is now elasticapm.capture_span

  • The setting traces_send_frequency has been renamed to flush_interval. The name of the analogous environment variable changed from ELASTIC_APM_TRACES_SEND_FREQ to ELASTIC_APM_FLUSH_INTERVAL

  • The app_name setting has been renamed to service_name. The name of the analogous environment variable changed from ELASTIC_APM_APP_NAME to ELASTIC_APM_SERVICE_NAME.

  • app_name arguments to API calls in the whole code base changed to service_name.

  • The app_version setting has been renamed to service_version. The name of the analogous environment variable changed from ELASTIC_APM_APP_VERSION to ELASTIC_APM_SERVICE_VERSION.

  • context.request.url.raw has been renamed to context.request.url.full {pull}121[#121]

  • BREAKING: added elasticapm.set_custom_context in favor of the more generic set_custom_data function {pull}133[#133]

  • BREAKING: include_patterns and exclude_patterns now use shell globs instead of regular expressions, and are matched against the full path file path of the module, not against the module name {pull}137[#137]

  • BREAKING: renamed several configuration options to align better with other language agents {pull}145[#145]:

  • disable_instrumentation became instrument and inverted its meaning

  • max_event_queue_length became max_queue_size

  • timeout became server_timeout

Python Agent version 1.x

v1.0.0

  • added max-event-queue-length setting. {pull}67[#67]

  • changed name that the agent reports itself with to the APM server from elasticapm-python to python. This aligns the Python agent with other languages. {pull}104[#104]

  • changed Celery integration to store the task state (e.g. SUCCESS or FAILURE) in transaction.result {pull}100[#100]

  • added setting to disable SSL certificate verification {pull}108[#108]

  • BREAKING: renamed server configuration variable to server_url to better align with other language agents {pull}105[#105]

  • BREAKING: removed the old and unused urllib2-based HTTP transport, and renamed the urllib3 transport {pull}107[#107]

  • BREAKING: several API changes to capture_exception, capture_message, and added documentation for these and other APIs {pull}112[#112]

v1.0.0.dev3

  • added a background thread to process the transactions queue every 60 seconds (configurable) {pull}68[#68]

  • adapted trace context for SQL traces to new API {pull}77[#77]

  • ensured that transaction data is also passed through processors {pull}84[#84]

  • added uninstrument function to reverse instrumentation, and exposed both instrument and uninstrument as public API in the elasticapm namespace {pull}90[#90]

  • added normalization of HTTP status codes into classes for the transaction.result field. A HTTP status of 200 will be turned into HTTP 2xx. The unchanged status code is still available in context.response.status_code. {pull}85[#85]

v1.0.0.dev2

  • added request context information for Flask {pull}58[#58]

  • added response context information for Flask {pull}65[#65]

  • BREAKING: changed the SERVERS list setting to a single SERVER string setting. With this change, we now only support sending events to a single server {pull}59[#59]

  • BREAKING: removed root trace. Due to historical reason, we used to create a "root trace" which was equivalent to the transaction. This is no longer necessary. #61

v1.0.0.dev1

  • unified configuration across supported frameworks {pull}33[#33]

  • added in-app frame detection {pull}36[#36]

  • added tagging functionality {pull}28[#28]

  • preliminary support for Django 2.0 {pull}26[#26]

  • initial set of documentation

v1.0.0.dev0

First release of the Python agent for Elastic APM