github.com/klaytn/klaytn@v1.12.1/cmd/homi/docker/service/prometheus.go (about)

     1  package service
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"text/template"
     7  )
     8  
     9  // docker-compose service
    10  type PrometheusService struct {
    11  	Config PrometheusConfig
    12  	Name   string
    13  	IP     string
    14  }
    15  
    16  func (prom PrometheusService) String() string {
    17  	tmpl, err := template.New("PrometheusService").Parse(prometheusServieTemplate)
    18  	if err != nil {
    19  		fmt.Printf("Failed to parse template, %v", err)
    20  		return ""
    21  	}
    22  
    23  	result := new(bytes.Buffer)
    24  	err = tmpl.Execute(result, prom)
    25  	if err != nil {
    26  		fmt.Printf("Failed to render template, %v", err)
    27  		return ""
    28  	}
    29  	return result.String()
    30  }
    31  
    32  var prometheusServieTemplate = `{{ .Name }}:
    33      hostname: {{ .Name }}
    34      image: prom/prometheus:v2.3.2
    35      ports:
    36        - 9090:9090
    37      volumes:
    38        - "./prometheus.yml:/etc/prometheus/prometheus.yml"
    39      networks:
    40        app_net:
    41          ipv4_address: {{ .IP }}
    42      restart: "no"
    43  `
    44  
    45  func NewPrometheusService(ip string, targetHostNames []string) *PrometheusService {
    46  	return &PrometheusService{
    47  		Name:   "prometheus",
    48  		IP:     ip,
    49  		Config: NewPrometheusConfig(targetHostNames),
    50  	}
    51  }
    52  
    53  // prometheus server config
    54  type PrometheusConfig struct {
    55  	Targets []string
    56  }
    57  
    58  func NewPrometheusConfig(targetHostNames []string) PrometheusConfig {
    59  	return PrometheusConfig{
    60  		Targets: targetHostNames,
    61  	}
    62  }
    63  
    64  func (promConfig PrometheusConfig) String() string {
    65  	tmpl, err := template.New("PrometheusConfig").Parse(prometheusConfigTemplate)
    66  	if err != nil {
    67  		fmt.Printf("Failed to parse template, %v", err)
    68  		return ""
    69  	}
    70  
    71  	result := new(bytes.Buffer)
    72  	err = tmpl.Execute(result, promConfig)
    73  	if err != nil {
    74  		fmt.Printf("Failed to render template, %v", err)
    75  		return ""
    76  	}
    77  
    78  	return result.String()
    79  }
    80  
    81  var prometheusConfigTemplate = `global:
    82    scrape_interval:     15s
    83    evaluation_interval: 15s
    84  
    85  scrape_configs:
    86    - job_name: 'klaytn'
    87      static_configs:
    88      - targets:
    89        {{- range .Targets }}
    90        - "{{ . }}:61001"
    91        {{- end }}
    92  `