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 00000000..255192ec --- /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 00000000..fca1817a --- /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 00000000..ea491a87 --- /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 00000000..abf44d71 --- /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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 BEl2` 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 00000000..372ce51a --- /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 00000000..6df07785 --- /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 00000000..0292929c --- /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 KcmV+b0RR6000031