def _set_up_environment(): # Trace variables need to be set in the global environment # since the Datadog Java Trace Agent does not live inside the Datadog Agent process if _is_dd_tracing_enabled(): os.environ["DD_SERVICE_NAME"] = _get_service() os.environ["DD_JMXFETCH_ENABLED"] = "false" dbconfig = database.get_config() if dbconfig: os.environ["DD_SERVICE_MAPPING"] = "{}:{}.db".format( dbconfig["DatabaseType"].lower(), _get_service()) e = dict(os.environ.copy()) # Everything in datadog.yaml can be configured with environment variables # This is the "official way" of working with the DD buildpack, so let's do this to ensure forward compatibility e["DD_API_KEY"] = get_api_key() e["DD_HOSTNAME"] = util.get_hostname() # Explicitly turn off tracing to ensure backward compatibility if not _is_dd_tracing_enabled(): e["DD_TRACE_ENABLED"] = "false" e["DD_LOGS_ENABLED"] = "true" e["DD_LOG_FILE"] = "/dev/null" tags = util.get_tags() if tags: e["DD_TAGS"] = ",".join(tags) e["DD_PROCESS_CONFIG_LOG_FILE"] = "/dev/null" e["DD_DOGSTATSD_PORT"] = str(_get_statsd_port()) # Include for forward-compatibility with DD buildpack e["DD_ENABLE_CHECKS"] = "true" e["DATADOG_DIR"] = str(os.path.abspath(DD_AGENT_DIR)) return e
def _get_tag_from_env(tag, env_var, default): dd_env = os.environ.get(env_var) if dd_env: return dd_env else: tags = util.get_tags() if tag in tags: return tags[tag] return default
def _get_datadog_tags(): tags = util.get_tags() if not "service" in tags: # app and / or service tag not set tags["service"] = get_service() tags_strings = [] for k, v in tags.items(): tags_strings.append("{}:{}".format(k, v)) return ",".join(tags_strings)
def _get_tags(): # Telegraf tags must be key / value tags = {} for kv in [t.split(":") for t in util.get_tags()]: if len(kv) == 2: tags[kv[0]] = kv[1] else: logging.warning( 'Skipping tag "{}" from TAGS because not a key/value'.format( kv[0])) return tags
def _get_service_from_tags(): dict_filter = lambda x, y: dict([(i, x[i]) for i in x if i in set(y)]) service_tags = sorted( OrderedDict(dict_filter(util.get_tags(), ("app", "service")), ).items(), reverse=True, ) if service_tags: return service_tags[0][1] return None
def update_config(m2ee): if (not is_enabled() or not _is_installed() or m2ee.config.get_runtime_version() < 7.14): return # Set up JVM JMX m2ee.config._conf["m2ee"]["javaopts"].extend([ "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.port=7845", "-Dcom.sun.management.jmxremote.local.only=true", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Djava.rmi.server.hostname=127.0.0.1", ]) # Set up runtime logging if m2ee.config.get_runtime_version() >= 7.15: m2ee.config._conf["logging"].append({ "type": "tcpjsonlines", "name": "DatadogSubscriber", "autosubscribe": "INFO", "host": "localhost", # For MX8 integer is supported again, this change needs to be # made when MX8 is GA "port": str(DD_LOGS_PORT), }) # Enable Mendix Java Agent enable_mx_java_agent(m2ee) # Experimental: enable Datadog Java Trace Agent # if tracing is explicitly enabled if _is_dd_tracing_enabled(): _enable_dd_java_agent(m2ee) # Set up Mendix check os.makedirs(DD_AGENT_CHECKS_DIR + "/mendix.d", exist_ok=True) with open(DD_AGENT_CHECKS_DIR + "/mendix.d/conf.yaml", "w") as fh: config = { "logs": [{ "type": "tcp", "port": str(DD_LOGS_PORT), "service": _get_service(), "source": "mendix", "tags": util.get_tags(), }] } fh.write(yaml.safe_dump(config)) # Set up embedded checks _set_up_jmx() _set_up_postgres()
def _get_datadog_tags(model_version): tags = util.get_tags() if not "env" in tags: tags["env"] = get_env_tag() if not "service" in tags: tags["service"] = get_service_tag() if not "version" in tags: tags["version"] = get_version_tag(model_version) tags_strings = [] for k, v in tags.items(): tags_strings.append("{}:{}".format(k, v)) return ",".join(tags_strings)
def update_config(m2ee, app_name): if not is_enabled() or not _is_installed(): return # Populate Telegraf config template statsd_port = None if mx_java_agent.meets_version_requirements( m2ee.config.get_runtime_version()): statsd_port = get_statsd_port() template_path = os.path.join(CONFIG_FILE_DIR, TEMPLATE_FILENAME) tags = util.get_tags() if datadog.is_enabled() and "service" not in tags: # app and / or service tag not set tags["service"] = datadog.get_service() with open(template_path, "r") as file_: template = Template(file_.read(), trim_blocks=True, lstrip_blocks=True) rendered = template.render( interval=10, # in seconds tags=tags, hostname=util.get_hostname(), statsd_port=statsd_port, db_config=_get_db_config(), database_diskstorage_metric_enabled=datadog. is_database_diskstorage_metric_enabled(), database_rate_count_metrics_enabled=datadog. is_database_rate_count_metrics_enabled(), datadog_api_key=datadog.get_api_key(), datadog_url="{}series/".format(datadog.get_api_url()), http_outputs=_get_http_outputs(), ) logging.debug("Writing Telegraf configuration file...") with open(CONFIG_FILE_PATH, "w") as file_: file_.write(rendered) logging.debug("Telegraf configuration file written")
def _get_application(): app_tags = list(filter(lambda x: "app:" in x, util.get_tags())) if app_tags: return app_tags[0].split(":")[1] else: return util.get_appname()