• Flagr 配置说明


    说明文档来自官方文档 https://checkr.github.io/flagr/#/flagr_env

    完整配置

    包含了组件的配置参数以及说明,对于学习如何使用Flagr 还是很重要的,包含了数据库配置、jwt 安全配置、Flagr metrics 配置(对应的Recorder)
    目前是kafaka 配置,同时也内置了prometheus 的配置参数,以及一些常用监控工具的指标暴露。

    package config
    
    import "time"
    
    // Config is the whole configuration of the app
    var Config = struct {
        // Host - Flagr server host
        Host string `env:"HOST" envDefault:"localhost"`
        // Port - Flagr server port
        Port int `env:"PORT" envDefault:"18000"`
    
        // LogrusLevel sets the logrus logging level
        LogrusLevel string `env:"FLAGR_LOGRUS_LEVEL" envDefault:"info"`
        // PProfEnabled - to enable the standard pprof of golang's http server
        PProfEnabled bool `env:"FLAGR_PPROF_ENABLED" envDefault:"true"`
    
        // MiddlewareVerboseLoggerEnabled - to enable the negroni-logrus logger for all the endpoints useful for debugging
        MiddlewareVerboseLoggerEnabled bool `env:"FLAGR_MIDDLEWARE_VERBOSE_LOGGER_ENABLED" envDefault:"true"`
        // MiddlewareGzipEnabled - to enable gzip middleware
        MiddlewareGzipEnabled bool `env:"FLAGR_MIDDLEWARE_GZIP_ENABLED" envDefault:"true"`
    
        // RateLimiterPerFlagPerSecondConsoleLogging - to rate limit the logging rate
        // per flag per second
        RateLimiterPerFlagPerSecondConsoleLogging int `env:"FLAGR_RATELIMITER_PERFLAG_PERSECOND_CONSOLE_LOGGING" envDefault:"100"`
    
        // EvalEnableDebug - controls if we want to return evaluation debugging information back to the api requests
        // Note that this is a global switch:
        // if it's disabled, no evaluation debug info will be returned.
        // if it's enabled, it respects evaluation request's enableDebug field
        EvalDebugEnabled bool `env:"FLAGR_EVAL_DEBUG_ENABLED" envDefault:"true"`
        // EvalLoggingEnabled - to enable the logging for eval results
        EvalLoggingEnabled bool `env:"FLAGR_EVAL_LOGGING_ENABLED" envDefault:"true"`
        // EvalCacheRefreshTimeout - timeout of getting the flags data from DB into the in-memory evaluation cache
        EvalCacheRefreshTimeout time.Duration `env:"FLAGR_EVALCACHE_REFRESHTIMEOUT" envDefault:"59s"`
        // EvalCacheRefreshInterval - time interval of getting the flags data from DB into the in-memory evaluation cache
        EvalCacheRefreshInterval time.Duration `env:"FLAGR_EVALCACHE_REFRESHINTERVAL" envDefault:"3s"`
        // EvalOnlyMode - will only expose the evaluation related endpoints.
        // This field will be derived from DBDriver
        EvalOnlyMode bool `env:"FLAGR_EVAL_ONLY_MODE" envDefault:"false"`
    
        /**
        DBDriver and DBConnectionStr define how we can write and read flags data.
        For databases, flagr supports sqlite3, mysql and postgres.
        For read-only evaluation, flagr supports file and http.
    
        Examples:
    
        FLAGR_DB_DBDRIVER FLAGR_DB_DBCONNECTIONSTR
        ================= ===============================================================
        "sqlite3" "/tmp/file.db"
        "sqlite3" ":memory:"
        "mysql" "root:@tcp(127.0.0.1:18100)/flagr?parseTime=true"
        "postgres" "host=myhost user=root dbname=flagr password=mypassword"
    
        "json_file" "/tmp/flags.json" # (it automatically sets EvalOnlyMode=true)
        "json_http" "https://example.com/flags.json" # (it automatically sets EvalOnlyMode=true)
    
        */
        DBDriver string `env:"FLAGR_DB_DBDRIVER" envDefault:"sqlite3"`
        DBConnectionStr string `env:"FLAGR_DB_DBCONNECTIONSTR" envDefault:"flagr.sqlite"`
        // DBConnectionDebug controls whether to show the database connection debugging logs
        // warning: it may log the credentials to the stdout
        DBConnectionDebug bool `env:"FLAGR_DB_DBCONNECTION_DEBUG" envDefault:"true"`
        // DBConnectionRetryAttempts controls how we are going to retry on db connection when start the flagr server
        DBConnectionRetryAttempts uint `env:"FLAGR_DB_DBCONNECTION_RETRY_ATTEMPTS" envDefault:"9"`
        DBConnectionRetryDelay time.Duration `env:"FLAGR_DB_DBCONNECTION_RETRY_DELAY" envDefault:"100ms"`
    
        // CORSEnabled - enable CORS
        CORSEnabled bool `env:"FLAGR_CORS_ENABLED" envDefault:"true"`
    
        // SentryEnabled - enable Sentry and Sentry DSN
        SentryEnabled bool `env:"FLAGR_SENTRY_ENABLED" envDefault:"false"`
        SentryDSN string `env:"FLAGR_SENTRY_DSN" envDefault:""`
    
        // NewRelicEnabled - enable the NewRelic monitoring for all the endpoints and DB operations
        NewRelicEnabled bool `env:"FLAGR_NEWRELIC_ENABLED" envDefault:"false"`
        NewRelicAppName string `env:"FLAGR_NEWRELIC_NAME" envDefault:"flagr"`
        NewRelicKey string `env:"FLAGR_NEWRELIC_KEY" envDefault:""`
    
        // StatsdEnabled - enable statsd metrics for all the endpoints and DB operations
        StatsdEnabled bool `env:"FLAGR_STATSD_ENABLED" envDefault:"false"`
        StatsdHost string `env:"FLAGR_STATSD_HOST" envDefault:"127.0.0.1"`
        StatsdPort string `env:"FLAGR_STATSD_PORT" envDefault:"8125"`
        StatsdPrefix string `env:"FLAGR_STATSD_PREFIX" envDefault:"flagr."`
        StatsdAPMEnabled bool `env:"FLAGR_STATSD_APM_ENABLED" envDefault:"false"`
        StatsdAPMPort string `env:"FLAGR_STATSD_APM_PORT" envDefault:"8126"`
        StatsdAPMServiceName string `env:"FLAGR_STATSD_APM_SERVICE_NAME" envDefault:"flagr"`
    
        // PrometheusEnabled - enable prometheus metrics export
        PrometheusEnabled bool `env:"FLAGR_PROMETHEUS_ENABLED" envDefault:"false"`
        // PrometheusPath - set the path on which prometheus metrics are available to scrape
        PrometheusPath string `env:"FLAGR_PROMETHEUS_PATH" envDefault:"/metrics"`
        // PrometheusIncludeLatencyHistogram - set whether Prometheus should also export a histogram of request latencies (this increases cardinality significantly)
        PrometheusIncludeLatencyHistogram bool `env:"FLAGR_PROMETHEUS_INCLUDE_LATENCY_HISTOGRAM" envDefault:"false"`
    
        // RecorderEnabled - enable data records logging
        RecorderEnabled bool `env:"FLAGR_RECORDER_ENABLED" envDefault:"false"`
        // RecorderType - the pipeline to log data records, e.g. Kafka
        RecorderType string `env:"FLAGR_RECORDER_TYPE" envDefault:"kafka"`
    
        /**
        RecorderFrameOutputMode - indicates which data record frame output mode should we use.
        Possible values: payload_string, payload_raw_json
    
        * payload_string mode:
            it respects the encryption settings, and it will stringify the payload to unify
            the type of the output for both plaintext and encrypted payload.
    
            {"payload":"{"evalContext":{"entityID":"123"},"flagID":1,"flagKey":null,"flagSnapshotID":1,"segmentID":1,"timestamp":null,"variantAttachment":null,"variantID":1,"variantKey":"control"}","encrypted": false}
    
        * payload_raw_json mode:
            it ignores the encryption settings.
    
            {"payload":{"evalContext":{"entityID":"123"},"flagID":1,"flagKey":null,"flagSnapshotID":1,"segmentID":1,"timestamp":null,"variantAttachment":null,"variantID":1,"variantKey":"control"}}
        */
        RecorderFrameOutputMode string `env:"FLAGR_RECORDER_FRAME_OUTPUT_MODE" envDefault:"payload_string"`
    
        // Kafka related configurations for data records logging (Flagr Metrics)
        RecorderKafkaVersion string `env:"FLAGR_RECORDER_KAFKA_VERSION" envDefault:"0.8.2.0"`
        RecorderKafkaBrokers string `env:"FLAGR_RECORDER_KAFKA_BROKERS" envDefault:":9092"`
        RecorderKafkaCertFile string `env:"FLAGR_RECORDER_KAFKA_CERTFILE" envDefault:""`
        RecorderKafkaKeyFile string `env:"FLAGR_RECORDER_KAFKA_KEYFILE" envDefault:""`
        RecorderKafkaCAFile string `env:"FLAGR_RECORDER_KAFKA_CAFILE" envDefault:""`
        RecorderKafkaVerifySSL bool `env:"FLAGR_RECORDER_KAFKA_VERIFYSSL" envDefault:"false"`
        RecorderKafkaVerbose bool `env:"FLAGR_RECORDER_KAFKA_VERBOSE" envDefault:"true"`
        RecorderKafkaTopic string `env:"FLAGR_RECORDER_KAFKA_TOPIC" envDefault:"flagr-records"`
        RecorderKafkaRetryMax int `env:"FLAGR_RECORDER_KAFKA_RETRYMAX" envDefault:"5"`
        RecorderKafkaFlushFrequency time.Duration `env:"FLAGR_RECORDER_KAFKA_FLUSHFREQUENCY" envDefault:"500ms"`
        RecorderKafkaEncrypted bool `env:"FLAGR_RECORDER_KAFKA_ENCRYPTED" envDefault:"false"`
        RecorderKafkaEncryptionKey string `env:"FLAGR_RECORDER_KAFKA_ENCRYPTION_KEY" envDefault:""`
    
        // Kinesis related configurations for data records logging (Flagr Metrics)
        RecorderKinesisStreamName string `env:"FLAGR_RECORDER_KINESIS_STREAM_NAME" envDefault:"flagr-records"`
        RecorderKinesisBacklogCount int `env:"FLAGR_RECORDER_KINESIS_BACKLOG_COUNT" envDefault:"500"`
        RecorderKinesisMaxConnections int `env:"FLAGR_RECORDER_KINESIS_MAX_CONNECTIONS" envDefault:"24"`
        RecorderKinesisFlushInterval time.Duration `env:"FLAGR_RECORDER_KINESIS_FLUSH_INTERVAL" envDefault:"5s"`
        RecorderKinesisBatchCount int `env:"FLAGR_RECORDER_KINESIS_BATCH_COUNT" envDefault:"500"`
        RecorderKinesisBatchSize int `env:"FLAGR_RECORDER_KINESIS_BATCH_SIZE" envDefault:"0"`
        RecorderKinesisAggregateBatchCount int `env:"FLAGR_RECORDER_KINESIS_AGGREGATE_BATCH_COUNT" envDefault:"4294967295"`
        RecorderKinesisAggregateBatchSize int `env:"FLAGR_RECORDER_KINESIS_AGGREGATE_BATCH_SIZE" envDefault:"51200"`
        RecorderKinesisVerbose bool `env:"FLAGR_RECORDER_KINESIS_VERBOSE" envDefault:"false"`
    
        // Pubsub related configurations for data records logging (Flagr Metrics)
        RecorderPubsubProjectID string `env:"FLAGR_RECORDER_PUBSUB_PROJECT_ID" envDefault:""`
        RecorderPubsubTopicName string `env:"FLAGR_RECORDER_PUBSUB_TOPIC_NAME" envDefault:"flagr-records"`
        RecorderPubsubKeyFile string `env:"FLAGR_RECORDER_PUBSUB_KEYFILE" envDefault:""`
        RecorderPubsubVerbose bool `env:"FLAGR_RECORDER_PUBSUB_VERBOSE" envDefault:"false"`
        RecorderPubsubVerboseCancelTimeout time.Duration `env:"FLAGR_RECORDER_PUBSUB_VERBOSE_CANCEL_TIMEOUT" envDefault:"5s"`
    
        /**
        JWTAuthEnabled enables the JWT Auth
    
        Via Cookies:
            The pattern of using JWT auth token using cookies is that it redirects to the URL to set cross subdomain cookie
            For example, redirect to auth.example.com/signin, which sets Cookie access_token=jwt_token for domain
            ".example.com". One can also whitelist some routes so that they don't get blocked by JWT auth
    
        Via Headers:
            If you wish to use JWT Auth via headers you can simply set the header `Authorization Bearer [access_token]`
    
        Supported signing methods:
            * HS256, in this case `FLAGR_JWT_AUTH_SECRET` contains the passphrase
            * RS256, in this case `FLAGR_JWT_AUTH_SECRET` contains the key in PEM Format
    
        Note:
            If the access_token is present in both the header and cookie only the latest will be used
        */
        JWTAuthEnabled bool `env:"FLAGR_JWT_AUTH_ENABLED" envDefault:"false"`
        JWTAuthDebug bool `env:"FLAGR_JWT_AUTH_DEBUG" envDefault:"false"`
        JWTAuthPrefixWhitelistPaths []string `env:"FLAGR_JWT_AUTH_WHITELIST_PATHS" envDefault:"/api/v1/evaluation,/static" envSeparator:","`
        JWTAuthExactWhitelistPaths []string `env:"FLAGR_JWT_AUTH_EXACT_WHITELIST_PATHS" envDefault:",/" envSeparator:","`
        JWTAuthCookieTokenName string `env:"FLAGR_JWT_AUTH_COOKIE_TOKEN_NAME" envDefault:"access_token"`
        JWTAuthSecret string `env:"FLAGR_JWT_AUTH_SECRET" envDefault:""`
        JWTAuthNoTokenStatusCode int `env:"FLAGR_JWT_AUTH_NO_TOKEN_STATUS_CODE" envDefault:"307"` // "307" or "401"
        JWTAuthNoTokenRedirectURL string `env:"FLAGR_JWT_AUTH_NO_TOKEN_REDIRECT_URL" envDefault:""`
        JWTAuthUserProperty string `env:"FLAGR_JWT_AUTH_USER_PROPERTY" envDefault:"flagr_user"`
        // JWTAuthUserClaim can be used as the indicator of a user for created_by or updated_by.
        // E.g. sub, email, user, name, and etc in a JWT token.
        JWTAuthUserClaim string `env:"FLAGR_JWT_AUTH_USER_CLAIM" envDefault:"sub"`
    
        // "HS256" and "RS256" supported
        JWTAuthSigningMethod string `env:"FLAGR_JWT_AUTH_SIGNING_METHOD" envDefault:"HS256"`
    
        // WebPrefix - base path for web and API
        // e.g. FLAGR_WEB_PREFIX=/foo
        // UI path => localhost:18000/foo"
        // API path => localhost:18000/foo/api/v1"
        WebPrefix string `env:"FLAGR_WEB_PREFIX" envDefault:""`
    }{}

    说明

    从配置参数中我们可以看出功能还是很强大,类似的工具有togglzff4j

  • 相关阅读:
    TimesTen的安装和连接
    推荐10款免费而优秀的图表插件
    做了一个jquery插件,使表格的标题列可左右拉伸
    基于SSM实现的简易员工管理系统(基于阿里云的网站上线篇)
    基于SSM实现的简易员工管理系统
    基于局域网的超简易即时通讯软件(二)
    基于局域网的超简易即时通讯软件(一)
    我的Vim常用快捷键
    php最新面试题
    2017php经典面试题
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10774167.html
Copyright © 2020-2023  润新知