Prometheusis an open-source systems monitoring and alerting toolkit originally built at SoundCloud.
普罗米修斯是最初由SoundCloud建立的一套开源的系统监控及预警的工具。
[TOC]
Prometheus 与 Influxdb都是时序数据库,比起关系型数据库,它们在时间序列数据的处理上具有极大的优势,例如长期高频率记录温度传感器的数值,该数据跟时间关联较大,且数据量极大。
1 | # /opt 目录类似于Windows的C://Program Files/目录 |
创建Service文件vi /usr/lib/systemd/system/prometheus.service
:
1 | [Unit] |
使用Systemd的Service的好处在于,可以开机自启动,并且失败可以自动重启,简化了运维管理。
重新加载Service文件:
systemctl daemon-reload
开机自启动:systemctl enable prometheus
启动服务:systemctl start prometheus
查看服务状态:systemctl status prometheus
查看服务输出:journalctl -xe -u prometheus
访问 http://127.0.0.1:9090/graph
Prometheus 的官方与第三方提供了多种 Exporter,它们会采集各种监控数据,供Prometheus定期拉取(Pull)。
1 | wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz |
vi /usr/lib/systemd/system/node_exporter.service
1 | [Unit] |
systemctl daemon-reload & systemctl enable node_exporter & systemctl start node_exporter
1 | wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz |
vi /usr/lib/systemd/system/mysqld_exporter.service
1 | [Unit] |
systemctl daemon-reload & systemctl enable mysqld_exporter & systemctl start mysqld_exporter
1 | wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.3.1/kafka_exporter-1.3.1.linux-amd64.tar.gz |
vi /usr/lib/systemd/system/kafka_exporter.service
1 | [Unit] |
systemctl daemon-reload & systemctl enable kafka_exporter & systemctl start kafka_exporter
Prometheus 根据配置文件中的
scrape_configs
,自动定期拉从Exporter拉取数据。
vi /opt/prometheus/prometheus.yml
1 | # 全局配置 |
1 | # 如果未添加 -web.enable-lifecycle,这个接口会返回:Lifecycle API is not enabled |
1 | wget https://dl.grafana.com/oss/release/grafana-8.1.1-1.x86_64.rpm |
访问 http://localhost:3000, 默认账户为 admin:admin, admin首次登陆需要重设密码。
添加Prometheus为数据源,然后去Grafana的Dashboards找一些合适的模板。
1 | # 生成密钥对 |
部署于Centos7系统,需要额外安装MySQL、JDK8+。
1 | # 下载Centos7使用的MySQL5.7 |
不要忘记设置PATH、JAVA_HOME
查找Nacos的最新的稳定包: https://github.com/alibaba/nacos/releases
1 | # 下载最新的文档包,这里是1.2.1 |
编辑Nacos的配置文件vi /opt/nacos/conf/application.properties
:
1 | # 取消MySQL相关的注释 |
启动单机模式的Nacos:
1 | sh /opt/nacos/bin/startup.sh -m standalone |
1 | SELECT |
虽然docker默认的swarm与k8s(kubernetes)处于竞争关系,docker依然可以部署容器到k8s。
1 | Server: Docker Engine - Community |
文件内容如下(保存前删除注释):
1 | version: "3.7" #compose file的版本,Docker Engine版本18.06.0+支持3.7 |
1 | # service组成的完整的功能模块(甚至是系统)被称为stack。指定orchestrator为k8s,通过上一步保存的yml文件,生成名为hello的stack。 |
Deploy a registry server
Use volumes
Use bind mounts
Garbage collection
HTTP API V2
Definition of: repository
本文介绍如何在本地部署docker私有仓库,涉及到registry镜像(registry:2)、volume与bind(bind mount)、仓库的http api、仓库的垃圾回收等知识点。
1 | Server: Docker Engine - Community |
1 | #创建一个名为registry-vol的卷 |
与bind直接使用宿主的文件系统不同,volume由docker直接生成与管理,它跨系统、跨平台、易于备份与迁移。
1 | #从docker hub拉取私有仓库的镜像 |
这里额外提供一个案例:
1 | #创建容器 |
需要注意的是:
-e REGISTRY_STORAGE_DELETE_ENABLED=true
,在第二个案例中可以通过在配置文件中添加registry:storage:delete:enabled:true
来替代。至此,私有仓库已经创建成功,我们可以通过docker提供的api确认一下:
1 | #访问私有仓库的接口 |
1 | #将本地镜像hello:latest(该镜像来自上个笔记)添加一个标签,其中localhost:5000对应私有仓库地址 |
repository指的是一组Docker镜像。 repository可以通过推送到仓库服务来分享。同一个repository中的不同镜像可以通过标签来归类。
hello镜像推送成功后,私有仓库会生成一个名为hello的repository。这个repository会存储各个tag的hello镜像,例如:hello:v1、hello:v2。
对于私有仓库,docker只提供了http api的接口文档,它并未提供官方的管理后台。为了方便学习,采用第三方提供的Joxit/docker-registry-ui。
1 | #拉取镜像 |
这里的REGISTRY_UR并不是 http://localhost:5000 ,因为容器和本机的localhost并不等价。通过以下方式取得在对应的docker网络中本机的局域网地址:
1 | #后台容器采用默认的bridge网络, 查询该网络的详细属性 |
通过浏览器访问 http://localhost:5050 ,可以通过管理后台对私有仓库进行管理了。
通过后台页面,找到删除功能并不复杂。但是即使删除成功,后台的repository列表中依然存在hello(虽然再也无法拉取镜像)。这并不是管理后台的问题,下面通过接口确认:
1 | #通过docker的http api查看存储的repository列表 |
查阅资料,发现官方指出:
也就是说之前通过api删除的,只是repository下的hello:latest镜像,而repository本身依然存在。
想要删除repository,需要通过一种stop-the-world(清理期间上传中的镜像可能会被误删)的方式:
1 | #查找私有仓库的容器ID |
Get Started, Part 2: Containers
Best practices for writing Dockerfiles
这里将通过一个简单的场景来学习Dockerfile的使用:制作一个安装了openresty的centos的镜像(image)。
1 | Server: Docker Engine - Community |
1 | # 后续这个目录将存放Dockerfile和entrypoint.sh |
1 | # 指定基础镜像,并且必须是第一条指令(如果不需要基础镜像,那么替换为 FROM scratch) |
1 |
|
文件生成完成后,记得还要通过chmod +x entrypoint.sh
给脚本加上执行权限,否则容器启动时将无法执行脚本。
Usage: docker build [OPTIONS] PATH | URL | -
1 | # 待生成镜像的name为hello,tag为缺省值latest,路径为.(当前工作目录) |
执行docker image ls
,docker会打印出本地存储的全部镜像,其中REPOSITORY为hello,TAG为latest的记录对应刚创建的镜像。
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
1 | # -d 该容器在后台执行 |
执行docker container ls
,docker会打印出本地执行中的全部容器,其中IMAGE为hello的记录对应刚启动的容器。
打开浏览器访问http://localhost:4000
,可以看到openrestry的默认主页,至此镜像及其对应的容器已创建完成。