Example #1
0
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
Example #2
0
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
Example #3
0
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)
Example #4
0
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
Example #5
0
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
Example #6
0
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()
Example #7
0
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")
Example #9
0
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()