Giter Club home page Giter Club logo

nebula-stats-exporter's Introduction


English | 中文
A distributed, scalable, lightning-fast graph database

Nebula stats exporter

Nebula Graph exporter for Prometheus.

The metrics currently collected are:

  • Graphd's metrics
  • Graphd's space level metrics
  • Metad's metrics
  • Storaged's metrics
  • Storaged's rocksdb metrics
  • Metad Listener's metrics
  • Storaged Listener's metrics
  • Draienrd's metrics

Building and running the exporter

$ git clone https://github.com/vesoft-inc/nebula-stats-exporter.git
$ cd nebula-stats-exporter
$ make build
$ ./nebula-stats-exporter --help
usage: nebula-stats-exporter [<flags>]

Flags:
  -h, --help                    Show context-sensitive help (also try --help-long and --help-man).
      --listen-address=":9100"  Address of nebula metrics server
      --namespace="default"     The namespace which nebula in
      --cluster=""              The cluster name for nebula, default get metrics of all clusters in the namespace.
      --kube-config=""          The kubernetes config file
      --max-request=40          Maximum number of parallel scrape requests. Use 0 to disable.
      --bare-metal              Whether running in bare metal environment
      --bare-metal-config="/config.yaml"
                                The bare metal config file
      --version                 Show application version.

The --bare-metal-config file examples:

clusters:                                   # a list of clusters you want to monitor
  - name: nebula                            # the cluster name
    instances:                              # a list of instances for this cluster
      - name: metad0                        # the instance name
        endpointIP: 192.168.10.131          # the ip of this instance
        endpointPort: 19559                 # the port of this instance
        componentType: metad                # the component type of this instance, optional value metad, graphd and storaged.
      - ...

See config.yaml for details.

Basic Prometheus Configuration

Add a block to the scrape_configs of your prometheus.yaml config file:

scrape_configs:
  - job_name: 'nebula-stats-exporter'
    static_configs:
      - targets: ['<<NEBULA_STATS_EXPORTER_HOSTNAME>>:9100'] # nebula-stats-exporter metrics endpoints

And adjust the host name NEBULA_STATS_EXPORTER_HOSTNAME accordingly.

Run with Docker

$ docker run -d --restart=always --name nebula-stats-exporter -p 9100:9100 \
    -v "<<PATH_OF_CONFIG_FILE>>:/config.yaml" \
    vesoft/nebula-stats-exporter:v3.3.0 --bare-metal --bare-metal-config=/config.yaml

# For example:
$ docker run -d --restart=always --name nebula-stats-exporter -p 9100:9100 \
    -v "$(pwd)/deploy/bare-metal/config.yaml:/config.yaml" \
    vesoft/nebula-stats-exporter:v3.3.0 --bare-metal --bare-metal-config=/config.yaml

Run on Bare Metal

Here is an introduction to deploy on Bare Metal.

Run on Kubernetes

Here is an introduction to deploy on Kubernetes.

Import grafana config

Please import nebula-grafana.json into your grafana.

Wait a while, then you can see the charts in grafana.

nebula-stats-exporter's People

Contributors

aiee avatar amber1990zhang avatar dutor avatar knightxun avatar kqzh avatar megabyte875 avatar shinji-ikarig avatar veezhang avatar xjlgod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nebula-stats-exporter's Issues

KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined

我想直接指定配置文件启动服务,没想容器部署,为什么一定要制定KUBERNETES_SERVICE_HOST 和 KUBERNETES_SERVICE_PORT呢?

shell:~/nebula-stats-exporter$ ./nebula-stats-exporter --bare-metal-config="/nebula-stats-exporter/config.yaml"
F0818 16:56:51.941470 40432 main.go:63] build config failed: unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined

support arm64 image

Is your feature request related to a problem? Please describe.

Describe the solution you'd like

Describe alternatives you've considered

Additional context

nebula-stats-exporter 自定义端口不生效【建议优化】

docker 镜像启动nebula-stats-exporter和prometheus, 在修改端口和配置文件启动的情况下,镜像仍然会占用和使用默认端口

docker run -d --restart=always -p 9200:9200 -v /opt/nebula-stats-exporter/deploy/bare-metal:/config \

vesoft/nebula-stats-exporter:v0.0.2 --bare-metal --bare-metal-config-path=/config/config.yaml

docker run -d --name=prometheus --restart=always -p 9080:9080 -v /opt/nebula-stats-exporter/deploy/bare-metal/prometheus.yml prom/prometheus

[root@data-cdh-d1-01 bare-metal]#
[root@data-cdh-d1-01 bare-metal]# docker logs d08aed79e558
I1230 10:35:08.504653 1 exporter.go:317] Begin Describe Nebula Metrics
I1230 10:35:08.507006 1 exporter.go:330] Describe Nebula Metrics Done
I1230 10:35:08.508366 1 main.go:81] Providing metrics at :9100/metrics
[root@data-cdh-d1-01 bare-metal]#

修改端口原因,阿里云esc会默认拉起一个进程监听9100端口,不使用自定义端口则监控无法使用.

希望可以支持

Occasionally no data

Error message below:
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
time="2021-06-11T07:10:06Z" level=error msg="error encoding and sending metric family: write tcp 172.17.0.4:9100->172.17.0.1:49518: write: broken pipe\n" source="log.go:181"
2021/06/11 07:10:06 http: superfluous response.WriteHeader call from github.com/prometheus/client_golang/prometheus/promhttp.(*responseWriterDelegator).WriteHeader (delegator.go:58)

image

can't read metrics from nebula-graph which version is nightly

The problem is caused by different nebula version has different stats format, nebula_stats_exporter don't compatibility nightly version now.

# curl nightly metad http://192.168.8.91:19559/stats?stats=

heartbeat_latency_us.avg.5=254
heartbeat_latency_us.avg.60=294
heartbeat_latency_us.avg.600=252
heartbeat_latency_us.avg.3600=231
heartbeat_latency_us.p75.5=627
heartbeat_latency_us.p75.60=647
heartbeat_latency_us.p75.600=626
heartbeat_latency_us.p75.3600=615
heartbeat_latency_us.p95.5=925
heartbeat_latency_us.p95.60=929
heartbeat_latency_us.p95.600=925
heartbeat_latency_us.p95.3600=923
heartbeat_latency_us.p99.5=985
heartbeat_latency_us.p99.60=985
heartbeat_latency_us.p99.600=985
heartbeat_latency_us.p99.3600=984
num_heartbeats.rate.5=0
num_heartbeats.rate.60=0
num_heartbeats.rate.600=0
num_heartbeats.rate.3600=0
num_heartbeats.sum.5=2
num_heartbeats.sum.60=12
num_heartbeats.sum.600=118
num_heartbeats.sum.3600=708
...
# curl v2.0.1 metad http://192.168.8.166:19559/stats?stats=

value=0
name=heartbeat_latency_us.avg.5
value=0
name=heartbeat_latency_us.avg.60
value=0
name=heartbeat_latency_us.avg.600
value=0
name=heartbeat_latency_us.avg.3600
value=0
name=heartbeat_latency_us.p75.5
value=0
name=heartbeat_latency_us.p75.60
value=0
name=heartbeat_latency_us.p75.600
value=0
name=heartbeat_latency_us.p75.3600
value=0
name=heartbeat_latency_us.p95.5
value=0
name=heartbeat_latency_us.p95.60
value=0
name=heartbeat_latency_us.p95.600
value=0
name=heartbeat_latency_us.p95.3600
value=0
name=heartbeat_latency_us.p99.5
value=0
name=heartbeat_latency_us.p99.60
...
# curl exporter http://192.168.8.111:9100/metrics

# HELP nebula_graphd_count 
# TYPE nebula_graphd_count gauge
nebula_graphd_count{componentType="graphd",instanceName="graphd0",namespace="nebula"} 1
# HELP nebula_metad_count 
# TYPE nebula_metad_count gauge
nebula_metad_count{componentType="metad",instanceName="metad0",namespace="nebula"} 1
# HELP nebula_storaged_count 
# TYPE nebula_storaged_count gauge
nebula_storaged_count{componentType="storaged",instanceName="storaged0",namespace="nebula"} 1
# HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
# TYPE promhttp_metric_handler_errors_total counter
promhttp_metric_handler_errors_total{cause="encoding"} 0
promhttp_metric_handler_errors_total{cause="gathering"} 0
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 12
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

README/Doc in EN

Could we have README in English and rename the Chinese version ones as *-CN.md?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.