From 542f5c4be3a0e5ae5a2eb7ecde3d93aa572394af Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Fri, 7 Jul 2023 13:54:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0grafana=E3=80=81promethe?= =?UTF-8?q?us=20(#208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:添加adguardhome、memcached、qiandao、lsky-pro、bitwarden、rustdesk、synapse * feat:添加cloudreve、nginx-proxy-manager、code-server * fix:修正code-server的service name * feat:添加grafana、prometheus --- apps/grafana/10.0.1/data.yml | 11 ++ apps/grafana/10.0.1/docker-compose.yml | 22 +++ apps/grafana/README.md | 68 +++++++ apps/grafana/data.yml | 20 +++ apps/grafana/logo.png | Bin 0 -> 29579 bytes apps/prometheus/2.45.0/data.yml | 11 ++ apps/prometheus/2.45.0/data/prometheus.yml | 29 +++ apps/prometheus/2.45.0/docker-compose.yml | 18 ++ apps/prometheus/README.md | 197 +++++++++++++++++++++ apps/prometheus/data.yml | 20 +++ apps/prometheus/logo.png | Bin 0 -> 5765 bytes 11 files changed, 396 insertions(+) create mode 100644 apps/grafana/10.0.1/data.yml create mode 100644 apps/grafana/10.0.1/docker-compose.yml create mode 100644 apps/grafana/README.md create mode 100644 apps/grafana/data.yml create mode 100644 apps/grafana/logo.png create mode 100644 apps/prometheus/2.45.0/data.yml create mode 100644 apps/prometheus/2.45.0/data/prometheus.yml create mode 100644 apps/prometheus/2.45.0/docker-compose.yml create mode 100644 apps/prometheus/README.md create mode 100644 apps/prometheus/data.yml create mode 100644 apps/prometheus/logo.png diff --git a/apps/grafana/10.0.1/data.yml b/apps/grafana/10.0.1/data.yml new file mode 100644 index 000000000..255192ecc --- /dev/null +++ b/apps/grafana/10.0.1/data.yml @@ -0,0 +1,11 @@ +additionalProperties: + formFields: + - default: 40038 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + diff --git a/apps/grafana/10.0.1/docker-compose.yml b/apps/grafana/10.0.1/docker-compose.yml new file mode 100644 index 000000000..fca1817a2 --- /dev/null +++ b/apps/grafana/10.0.1/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + grafana: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + volumes: + - grafana_data:/var/lib/grafana + image: grafana/grafana:10.0.1 + labels: + createdBy: "Apps" + +volumes: + grafana_data: + external: true + +networks: + 1panel-network: + external: true diff --git a/apps/grafana/README.md b/apps/grafana/README.md new file mode 100644 index 000000000..ea491a87d --- /dev/null +++ b/apps/grafana/README.md @@ -0,0 +1,68 @@ +# 使用说明 + +默认账户与密码 +``` +username:admin +password:admin +``` + +注意:应用部署前需要先创建存储卷, + +终端运行 +``` +docker volume create grafana_data +``` + +假如需要完全删除数据,除了删除容器还需要删除存储卷`grafana_data`。 + +# 原始相关 + +![Grafana](https://raw.githubusercontent.com/grafana/grafana/main/docs/logo-horizontal.png) + +The open-source platform for monitoring and observability + +[![License](https://img.shields.io/github/license/grafana/grafana)](LICENSE) +[![Drone](https://drone.grafana.net/api/badges/grafana/grafana/status.svg)](https://drone.grafana.net/grafana/grafana) +[![Go Report Card](https://goreportcard.com/badge/github.com/grafana/grafana)](https://goreportcard.com/report/github.com/grafana/grafana) + +Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data-driven culture: + +- **Visualizations:** Fast and flexible client side graphs with a multitude of options. Panel plugins offer many different ways to visualize metrics and logs. +- **Dynamic Dashboards:** Create dynamic & reusable dashboards with template variables that appear as dropdowns at the top of the dashboard. +- **Explore Metrics:** Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side. +- **Explore Logs:** Experience the magic of switching from metrics to logs with preserved label filters. Quickly search through all your logs or streaming them live. +- **Alerting:** Visually define alert rules for your most important metrics. Grafana will continuously evaluate and send notifications to systems like Slack, PagerDuty, VictorOps, OpsGenie. +- **Mixed Data Sources:** Mix different data sources in the same graph! You can specify a data source on a per-query basis. This works for even custom datasources. + +## Get started + +- [Get Grafana](https://grafana.com/get) +- [Installation guides](https://grafana.com/docs/grafana/latest/setup-grafana/installation/) + +Unsure if Grafana is for you? Watch Grafana in action on [play.grafana.org](https://play.grafana.org/)! + +## Documentation + +The Grafana documentation is available at [grafana.com/docs](https://grafana.com/docs/). + +## Contributing + +If you're interested in contributing to the Grafana project: + +- Start by reading the [Contributing guide](https://github.com/grafana/grafana/blob/HEAD/CONTRIBUTING.md). +- Learn how to set up your local environment, in our [Developer guide](https://github.com/grafana/grafana/blob/HEAD/contribute/developer-guide.md). +- Explore our [beginner-friendly issues](https://github.com/grafana/grafana/issues?q=is%3Aopen+is%3Aissue+label%3A%22beginner+friendly%22). +- Look through our [style guide and Storybook](https://developers.grafana.com/ui/latest/index.html). + +## Get involved + +- Follow [@grafana on Twitter](https://twitter.com/grafana/). +- Read and subscribe to the [Grafana blog](https://grafana.com/blog/). +- If you have a specific question, check out our [discussion forums](https://community.grafana.com/). +- For general discussions, join us on the [official Slack](https://slack.grafana.com) team. + +This project is tested with [BrowserStack](https://www.browserstack.com/) + +## License + +Grafana is distributed under [AGPL-3.0-only](LICENSE). For Apache-2.0 exceptions, see [LICENSING.md](https://github.com/grafana/grafana/blob/HEAD/LICENSING.md). diff --git a/apps/grafana/data.yml b/apps/grafana/data.yml new file mode 100644 index 000000000..abf44d716 --- /dev/null +++ b/apps/grafana/data.yml @@ -0,0 +1,20 @@ +name: Grafana +tags: + - 工具 +title: 用于监控和可观察性的开源平台 +type: 工具 +description: 用于监控和可观察性的开源平台 +additionalProperties: + key: grafana + name: Grafana + tags: + - Tool + shortDescZh: 用于监控和可观察性的开源平台 + shortDescEn: The open-source platform for monitoring and observability + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://grafana.com/ + github: https://github.com/grafana/grafana + document: https://grafana.com/docs/grafana \ No newline at end of file diff --git a/apps/grafana/logo.png b/apps/grafana/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ebe3511f23a54171b203019f719c70d44f5e38 GIT binary patch literal 29579 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

Y>LJL^>s27BNP?f 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 literal 0 HcmV?d00001 diff --git a/apps/prometheus/2.45.0/data.yml b/apps/prometheus/2.45.0/data.yml new file mode 100644 index 000000000..4aba8b498 --- /dev/null +++ b/apps/prometheus/2.45.0/data.yml @@ -0,0 +1,11 @@ +additionalProperties: + formFields: + - default: 40039 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + diff --git a/apps/prometheus/2.45.0/data/prometheus.yml b/apps/prometheus/2.45.0/data/prometheus.yml new file mode 100644 index 000000000..c72645477 --- /dev/null +++ b/apps/prometheus/2.45.0/data/prometheus.yml @@ -0,0 +1,29 @@ +# my global config +global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + +# Alertmanager configuration +alerting: + alertmanagers: + - static_configs: + - targets: + # - alertmanager:9093 + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: + # - "first_rules.yml" + # - "second_rules.yml" + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: "prometheus" + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ["localhost:9090"] \ No newline at end of file diff --git a/apps/prometheus/2.45.0/docker-compose.yml b/apps/prometheus/2.45.0/docker-compose.yml new file mode 100644 index 000000000..372ce51af --- /dev/null +++ b/apps/prometheus/2.45.0/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + prometheus: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:9090" + volumes: + - "./data:/etc/prometheus" + image: prom/prometheus:v2.45.0 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/prometheus/README.md b/apps/prometheus/README.md new file mode 100644 index 000000000..6df07785a --- /dev/null +++ b/apps/prometheus/README.md @@ -0,0 +1,197 @@ +# 使用说明 + +需要按需配置应用目录下`data`文件夹里的`prometheus.yml`,以自定义更多功能。 + + +# 原始相关 + +

+ Prometheus
Prometheus +

+ +

Visit prometheus.io for the full documentation, +examples and guides.

+ +
+ +[![CI](https://github.com/prometheus/prometheus/actions/workflows/ci.yml/badge.svg)](https://github.com/prometheus/prometheus/actions/workflows/ci.yml) +[![Docker Repository on Quay](https://quay.io/repository/prometheus/prometheus/status)][quay] +[![Docker Pulls](https://img.shields.io/docker/pulls/prom/prometheus.svg?maxAge=604800)][hub] +[![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/prometheus)](https://goreportcard.com/report/github.com/prometheus/prometheus) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/486/badge)](https://bestpractices.coreinfrastructure.org/projects/486) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/prometheus/prometheus) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/prometheus.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:prometheus) + +
+ +Prometheus, a [Cloud Native Computing Foundation](https://cncf.io/) project, is a systems and service monitoring system. It collects metrics +from configured targets at given intervals, evaluates rule expressions, +displays the results, and can trigger alerts when specified conditions are observed. + +The features that distinguish Prometheus from other metrics and monitoring systems are: + +* A **multi-dimensional** data model (time series defined by metric name and set of key/value dimensions) +* PromQL, a **powerful and flexible query language** to leverage this dimensionality +* No dependency on distributed storage; **single server nodes are autonomous** +* An HTTP **pull model** for time series collection +* **Pushing time series** is supported via an intermediary gateway for batch jobs +* Targets are discovered via **service discovery** or **static configuration** +* Multiple modes of **graphing and dashboarding support** +* Support for hierarchical and horizontal **federation** + +## Architecture overview + +![Architecture overview](https://raw.githubusercontent.com/prometheus/prometheus/main/documentation/images/architecture.svg) + +## Install + +There are various ways of installing Prometheus. + +### Precompiled binaries + +Precompiled binaries for released versions are available in the +[*download* section](https://prometheus.io/download/) +on [prometheus.io](https://prometheus.io). Using the latest production release binary +is the recommended way of installing Prometheus. +See the [Installing](https://prometheus.io/docs/introduction/install/) +chapter in the documentation for all the details. + +### Docker images + +Docker images are available on [Quay.io](https://quay.io/repository/prometheus/prometheus) or [Docker Hub](https://hub.docker.com/r/prom/prometheus/). + +You can launch a Prometheus container for trying it out with + +```bash +docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus +``` + +Prometheus will now be reachable at . + +### Building from source + +To build Prometheus from source code, You need: + +* Go [version 1.17 or greater](https://golang.org/doc/install). +* NodeJS [version 16 or greater](https://nodejs.org/). +* npm [version 7 or greater](https://www.npmjs.com/). + +Start by cloning the repository: + +```bash +git clone https://github.com/prometheus/prometheus.git +cd prometheus +``` + +You can use the `go` tool to build and install the `prometheus` +and `promtool` binaries into your `GOPATH`: + +```bash +GO111MODULE=on go install github.com/prometheus/prometheus/cmd/... +prometheus --config.file=your_config.yml +``` + +*However*, when using `go install` to build Prometheus, Prometheus will expect to be able to +read its web assets from local filesystem directories under `web/ui/static` and +`web/ui/templates`. In order for these assets to be found, you will have to run Prometheus +from the root of the cloned repository. Note also that these directories do not include the +React UI unless it has been built explicitly using `make assets` or `make build`. + +An example of the above configuration file can be found [here.](https://github.com/prometheus/prometheus/blob/main/documentation/examples/prometheus.yml) + +You can also build using `make build`, which will compile in the web assets so that +Prometheus can be run from anywhere: + +```bash +make build +./prometheus --config.file=your_config.yml +``` + +The Makefile provides several targets: + +* *build*: build the `prometheus` and `promtool` binaries (includes building and compiling in web assets) +* *test*: run the tests +* *test-short*: run the short tests +* *format*: format the source code +* *vet*: check the source code for common errors +* *assets*: build the React UI + +### Service discovery plugins + +Prometheus is bundled with many service discovery plugins. +When building Prometheus from source, you can edit the [plugins.yml](./plugins.yml) +file to disable some service discoveries. The file is a yaml-formated list of go +import path that will be built into the Prometheus binary. + +After you have changed the file, you +need to run `make build` again. + +If you are using another method to compile Prometheus, `make plugins` will +generate the plugins file accordingly. + +If you add out-of-tree plugins, which we do not endorse at the moment, +additional steps might be needed to adjust the `go.mod` and `go.sum` files. As +always, be extra careful when loading third party code. + +### Building the Docker image + +The `make docker` target is designed for use in our CI system. +You can build a docker image locally with the following commands: + +```bash +make promu +promu crossbuild -p linux/amd64 +make npm_licenses +make common-docker-amd64 +``` + +## Using Prometheus as a Go Library + +### Remote Write + +We are publishing our Remote Write protobuf independently at +[buf.build](https://buf.build/prometheus/prometheus/assets). + +You can use that as a library: + +```shell +go get go.buf.build/protocolbuffers/go/prometheus/prometheus +``` + +This is experimental. + +### Prometheus code base + +In order to comply with [go mod](https://go.dev/ref/mod#versions) rules, +Prometheus release number do not exactly match Go module releases. For the +Prometheus v2.y.z releases, we are publishing equivalent v0.y.z tags. + +Therefore, a user that would want to use Prometheus v2.35.0 as a library could do: + +```shell +go get github.com/prometheus/prometheus@v0.35.0 +``` + +This solution makes it clear that we might break our internal Go APIs between +minor user-facing releases, as [breaking changes are allowed in major version +zero](https://semver.org/#spec-item-4). + +## React UI Development + +For more information on building, running, and developing on the React-based UI, see the React app's [README.md](web/ui/README.md). + +## More information + +* Godoc documentation is available via [pkg.go.dev](https://pkg.go.dev/github.com/prometheus/prometheus). Due to peculiarities of Go Modules, v2.x.y will be displayed as v0.x.y. +* See the [Community page](https://prometheus.io/community) for how to reach the Prometheus developers and users on various communication channels. + +## Contributing + +Refer to [CONTRIBUTING.md](https://github.com/prometheus/prometheus/blob/main/CONTRIBUTING.md) + +## License + +Apache License 2.0, see [LICENSE](https://github.com/prometheus/prometheus/blob/main/LICENSE). + +[hub]: https://hub.docker.com/r/prom/prometheus/ +[quay]: https://quay.io/repository/prometheus/prometheus diff --git a/apps/prometheus/data.yml b/apps/prometheus/data.yml new file mode 100644 index 000000000..0292929c8 --- /dev/null +++ b/apps/prometheus/data.yml @@ -0,0 +1,20 @@ +name: Prometheus +tags: + - 工具 +title: 一个系统和服务监控系统 +type: 工具 +description: 一个系统和服务监控系统 +additionalProperties: + key: prometheus + name: Prometheus + tags: + - Tool + shortDescZh: 一个系统和服务监控系统 + shortDescEn: A systems and service monitoring system + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://prometheus.io/ + github: https://github.com/prometheus/prometheus + document: https://prometheus.io/docs/ \ No newline at end of file diff --git a/apps/prometheus/logo.png b/apps/prometheus/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0449f5f5b04d8ea3534b9c4c793734373a2dbe30 GIT binary patch literal 5765 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 DG`Y|H literal 0 HcmV?d00001