我是靠谱客的博主 任性季节,最近开发中收集的这篇文章主要介绍docker和prometheus学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 一些概念 :

虚拟化:使用模拟器模拟系统或者环境,比如vmware,linux里的kvm,xen等开源的虚拟化软件;oracle开源的virtual box的虚拟化软件

云原生:就是与k8s,prometheus相关的技术都叫做云原生

容器技术:docker,container;

理解:云是由小水滴和灰尘组成的,而服务器就是小水滴

云厂商:腾讯云,阿里云就是大量的机器聚集在一起,发挥巨大的作用,然后通过统计的调度和算力(计算的能力)

云服务:通过云计算公司提供的服务,例如提供服务器,数据库,提供存储等服务,

容器运行时:就理解为软件,对镜像的制作,拉取,容器的创建,管理等操作的一个软件

(docker,containerd,RKT这些软件)

云计算软件:vmware(vsphere),openstack

图为理解openstack:

 云计算里一些概念

Iaas--Infrastrucure as a service(基础设施即服务)硬件资源(cpu,内存,网络),卖云服务器 

Paas--Platform as a service(平台即服务),组件服务(数据库,操作系统),在平台卖软件

Saas--software as a service(软件即平台)作用是将应用作为服务提供给客户,在这种情况下,用户只要接上网络,通过浏览器,就能直接使用在云端上运行的应用,而不需要考虑安装等,卖某个软件的使用权

Baas--Blockchain as a server ,卖区块链服务的

容器

1,容器是轻量级的虚拟化

2,是更加节省资源的虚拟机 

软件厂商--docker,k8s

docker--提供容器技术的软件

k8s(kubernetes)--容器集群管理软件,可以管理很多台服务器上的docker启动的容器(就想着是zk和broker的关系),可以实现容器的分布式管理 ;

使用docker容器去启动软件,颠覆了我们软件安装的方式

容器(contains),理解成一个集装箱,是一个封闭的空间,有隔离作用(靠linux内核隔离 ),里面可以运行我们的程序

docker是容器的管理软件

#######################

真正意义上是docker起了containerd,containerd起了container-shim

容器技术与虚拟机技术对的对比 

 

 

 hypervisor,是一个软件,直接可以安装 到硬件上,是一个超级软件,也是一个操作系统

类似于vmware

 docker与虚拟机的区别

1,层次不一样:虚拟机多一次封装

docker的优势:

启动速度快

资源消耗小:资源可以控制;共用宿主机的内核,基础镜像,

扩展方便:HPA

缺点:app的隔离没有虚拟机彻底

########################

docker底层的隔离机制
1name space命名空间:name space 是内核的一个功能,用来给进程隔离一系列(网络,文件系统,进程等)系统资源
作用:隔离资源
资料
https://www.huweihuang.com/docker-notes/principle/namespace/namespace.html
###一个容器运行起来,背后是有不同的命名空间的
不同的命名空间有不同的资源,对外是一个容器,
########cgroup用来做资源限制

 

/etc/fstable--挂载分区

最小的内存限制是6MB,最小的cpu-share是2

 ###当容器里的进程运行达到容器的cpu或者内存的限制时候,容器里运行的进程会被kill掉,防止容器被kill掉

#linux内核给进程分配空间的时候,使用的就是虚拟内存

##################

下载docker
1,去官网找合适的系统(根据自己的系统等选择不同的系统安装)


https://docs.docker.com/engine/install/centos/

2,卸载原来安装的docker

yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

3,下载docker-ce的仓库文件(源),方便后面的安装

安装yum-utils包,提供yum-config-manager实用持续并设置稳定的存储库
yum install yum-utils

yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo


4,开始安装 yum install docker-ce docker-ce-cli containerd.io

docker-ce 核心软件,引擎
docker-ce-cli客户端软件,给用户使用的客户端工具集
containerd.io 管理容器运行的工具,是docker相关的组件

5,将服务运行起来

systemctl start docker

6,设置开机自启

systemctl enable docker

7,查看docker相关进程dockerd

ps aux | grep docker

卸载

#卸载 Docker 引擎、CLI 和 Containerd 软件包
yum remove docker-ce docker-ce-cli containerd.io
#主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

 docker里的重要概念

1,镜像image--》就是软件单元,里面包含app软件代码,运行时的环境,微型的操作系统,工具以及相关的库,

可以理解为镜像就是软件,镜像是人为制作,里面有程序的源代码和其他的环境

镜像里有什么?

微型的系统,app代码,库

2,镜像仓库image respository--》集中存放镜像的地方

https://hub.docker.com

3,容器container,运行镜像的地方,背后就是起一个进程来运行这个镜像

软件的安装方式:docker起运行某个软件的作用 

----容器运行时

传统意义上来说就是容器从拉去镜像到启动运行再到终止的整个生命周期

####一个容器里面只运行一个程序

##查看容器里面运行了拿些程序

docker top 容器名

##关闭某个容器

docker stop 容器名

##启动

docker start 容器名

##查看容器启动日志

docker logs 容器名

##进入容器内部

docker exec -it 容器名 /bin/bash

###寻找镜像

docker search 镜像名

##查看容器消耗的cpu,内存,磁盘io

docker stats

##########容器的状态:

up

create--容器已经创建了但是没有运行

docker pull + docker create +docker start = docker pull + docker run
exited--容器没有启动,exit(0)正常退出,exit(1)非正常退出

查看本机有哪些docker镜像

[root@web-nginx yum.repos.d]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

从docker拉nginx,下载镜像nginx,不指定版本默认下载最新的版本latest
 [root@web-nginx yum.repos.d]# docker pull nginx

#下载镜像后怎么启动还是要看官网,不一定是直接docker run 以官网为准,官网没有可以试一试docker run

#直接docker run不docker pull,没有也会直接去给你下载

[root@web-nginx yum.repos.d]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    b692a91e4e15   8 days ago   142MB

#####

启动nginx容器

docker ps -a可以查看到创建了但是没有启动的容器 

#################################docker rm删除容器

docker rm +要删除的( --rm选项表示退出容器时会自动将其删除)

如果是启动的容器要先停止才能删

################################docker rmi删除镜像

测试验证

去真实机器浏览器访问192.168.173.133:8090,可以直接访问到容器里的nginx

要是还想起一个nginx直接改个名字,把端口改一下

[root@web-nginx yum.repos.d]# docker run --name sc-nginx-2 -p 8091:80 -d nginx:latest

查看容器详细信息--比如nginx的ip啥的里面都有

docker  inspect 容器名字

#############

修改docker里面的nginx的首页

 

nginx的index在/etc/share/nginx/html下

下载mysql

先去hub.docker找mysql的版本

docker pull mysql:5.7.37#不接版本号默认下载最新的

 docker images--查看是否下载完成

docker run sc-mysql-1 -e MYSQL_ROOT_PASSWORD=你要设计的密码 -d -p 33060:3306 mysql:5.7.37--启动容器

#-e是环境变量,向环境变量里传入密码,设置密码,-d是放到后台

运行,-p是端口,33060;3306是端口映射,将33060映射到容器里面的3306

###验证

1,外面访问就是远程连接mysql -uroot -p密码 -p33060(自己设计的端口号)

2,宿主机进入容器内部docker exec -it sc-mysql-1 /bin/bash

进入容器内部再登录

下载flask镜像,先去hub.docker找镜像,然后pull下来  

#####运行ubuntu

docker run -it --name sc-ubuntu-2 ubuntu

-it和-d是对立参数,不能同时使用

-it是在前台执行

 -d是在后台执行

下载aws镜像

去官网hub.com找aws的镜像

docker pull amazonlinux  

启动

docker run  -it--name sc-aws-1 amazonlinux(不用接-d,-d是放到后台运行,接了-d会发现docker ps状态时exitd),(-it是交互式,直接进入容器内部)

###也可以docker exec -it --name sc-aws-1 /bin/bah

容器起来的第一个命令是起/bin/bash ,是个终端(只要运行起来就进入终端了)

###使用默认容器安装的系统,里面是个微型系统,很多命令都是没有的,需要自己去安装

当虚拟机挂起重启之后会导致docker异常可能上不了网

排查:

1真实机器能否上网,

2,如果是访问国外的网站,要考虑防火墙的问题

3重启docker服务 service docker restart --但是这个操作会导致docker里面运行的容器关闭,之后你需要手动去起每个容器(docker run )

##############文档

https://docs.docker.com/storage/volumes/

##################

卷--volume

是存放数据的地方--容器的内容存放在内存中,内存中必须做数据持久化操作,存在磁盘里,磁盘里有个文件夹就是卷存放数据

##################实现宿主机和容器间的数据共享

##################volume还可以实现数据持久化

数据存放在宿主机上,宿主机存放在磁盘上,容器是在内存里面跑的,容器关闭之后数据存到磁盘里;

  1. -v 对应的方法是bind mount 直接挂载
  2. --mount 对应的方法是使用volume  需要先创建才能使用

################使用卷
[root@web-nginx web]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

#####################创建卷
[root@web-nginx web]# docker volume create my-vol
my-vol

#####################查看宿主机里有哪些卷
[root@web-nginx web]# docker volume ls
DRIVER    VOLUME NAME
local     my-vol
#####################查看卷的详细信息
root@web-nginx web]# docker volume inspect my-vol
[
    {
        "CreatedAt": "2022-08-21T14:54:54+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]
######################使用卷
[root@web-nginx web]# docker run --name sc-nginx-3 -d -p 8093:80 --mount source=my-vol,target=/usr/share/nginx/html nginx
32012f3d17be08a4b9024b7a7ec8c2c6191f6225d8a65b15b4b2aa734b0f64e9
[root@web-nginx web]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
32012f3d17be   nginx          "/docker-entrypoint.…"   8 seconds ago   Up 6 seconds   0.0.0.0:8093->80/tcp, :::8093->80/tcp   sc-nginx-3
11236b184564   nginx:latest   "/docker-entrypoint.…"   10 days ago     Up 21 hours    0.0.0.0:8090->80/tcp, :::8090->80/tcp   sc-nginx-1
#######################卷的存放位置在卷的详细信息里有
[root@web-nginx web]# cd /var/lib/docker/volumes/my-vol
[root@web-nginx my-vol]# ls
_data
[root@web-nginx my-vol]# cd _data
[root@web-nginx _data]# ls
50x.html  index.html----直接修改这里的index.html就能修改容器sc-nginx-3的首页了

##########使用挂载

###在宿主机下新建文件夹/web

在web下编写index.html
###让nginx容器不使用/usr/share/nginx/html/index.html而使用宿主机下的/web/index.html
###将本地的/web挂到容器里的/usr/local/nginx/html
docker run --name sc-nginx-3 -d -p 8093:80 /web:/usr/share/nginx/html nginx
###之后浏览器访问验证

##########一台机器上多容器可以使用一个卷

##########多机器上的多容器实现数据共享

 

容器链接

--就是容器之间可以使用主机名访问

--主动链接的容器会知道被链接容器的信息:ip和端口

主要步骤:

在容器的hosts文件里添加名字对应的ip

 

 #################容器中常见的文件

存放容器的配置的数据

/var/lib/docker/containers/config.v2.json

------------------------------

容器里的dns服务器的地址使用的是宿主机的dns配置

容器网络类型

 

 ----------------------------------------------------官方文档

https://docs.docker.com/network/


-----------------------------------------------------

swarm

--是docker自己开发的一个多宿主机上的容器管理软件(docker集群的管理软件)

-------------------------------------------------------

overlay

--用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密,底层实现机制是vxlan协议

 ----------------------------------------------------------

--ipvlan和overlay都可以实现不同主机上的容器的通信

--但是ipvlan是所有的容器都是相同网段,相当于在一个vlan里,可以通过不同的子接口,对应不同的网段,实现不同的类型的容器之间的通信

------------------------------------------------------------

bridge官方文档
https://docs.docker.com/network/bridge/

[root@web-nginx ~]# docker network ls--查看网络类型有哪些
NETWORK ID     NAME      DRIVER    SCOPE
08a322062dda   bridge    bridge    local
baca2eb4325d   host      host      local
a3a77de20628   none      null      local
[root@web-nginx ~]# docker network create my-net--没有指定默认创建的是桥接类型(相当于在docker容器创建了一个交换机;在宿主机上添加了一个接口),我所有的容器都可以使用她
e5574e6c2857575152d7c8fb42326891290ba7fba4aca7bd0f83e4653c87ea2f
[root@web-nginx ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
08a322062dda   bridge    bridge    local
baca2eb4325d   host      host      local
e5574e6c2857   my-net    bridge    local--自己创建的
a3a77de20628   none      null      local
[root@web-nginx ~]# ip add
--就会多了一行这个,no carrier是当前没有容器使用这个交换机
 br-e5574e6c2857: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:d2:bc:19:df brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-e5574e6c2857
       valid_lft forever preferred_lft forever
[root@web-nginx ~]# docker run --name li-nginx-1 -d --network my-net -p 8081:80 nginx
--用自己定义的网桥
[root@web-nginx ~]# ip add
br-e5574e6c2857: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:d2:bc:19:df brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-e5574e6c2857
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d2ff:febc:19df/64 scope link 
       valid_lft forever preferred_lft forever

[root@web-nginx ~]# docker  network disconnect my-net li-nginx-1--从my-net网桥断开容器(从用户定义的网桥断开容器)
[root@web-nginx ~]# docker ps 
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
beb008ebbf3b   nginx             "/docker-entrypoint.…"   36 minutes ago   Up 36 minutes                                               li-nginx-1
06c99db47da9   jcdemo/flaskapp   "python /src/app.py"     5 hours ago      Up 5 hours      0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   sc-flask-1
c28b09a88b01   redis             "docker-entrypoint.s…"   5 hours ago      Up 5 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   sc-redis-1
15283162598a   nginx             "/docker-entrypoint.…"   6 hours ago      Up 6 hours      0.0.0.0:8080->80/tcp, :::8080->80/tcp       sc-nginx-1
[root@web-nginx ~]# docker  network connect my-net li-nginx-1
[root@web-nginx ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
beb008ebbf3b   nginx             "/docker-entrypoint.…"   37 minutes ago   Up 37 minutes   0.0.0.0:8081->80/tcp, :::8081->80/tcp       li-nginx-1
06c99db47da9   jcdemo/flaskapp   "python /src/app.py"     5 hours ago      Up 5 hours      0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   sc-flask-1
c28b09a88b01   redis             "docker-entrypoint.s…"   5 hours ago      Up 5 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   sc-redis-1
15283162598a   nginx             "/docker-entrypoint.…"   6 hours ago      Up 6 hours      0.0.0.0:8080->80/tcp, :::8080->80/tcp       sc-nginx-1

为什么宿主机能ping通容器但是不能ssh到容器里

--因为容器里没有ssh服务

--一个容器只跑一个程序

镜像 

为什么需要做镜像

--不能满足我们的需求,每个公司的业务不一样

--不够安全,有隐患

---------------------------------------

dockerfile是制作镜像的配置文件,是用来制作镜像的配方文件

------------------------------------------官网

https://docs.docker.com/engine/reference/builder/

--------------------------------------制作镜像

1,创建文件夹,用来存放代码和Dockerfile

2,新建一个文件hello,新建一个Dockerfile
FROM busybox     --从docker hub上下载一个叫busybox的镜像,作为我们制作镜像的基础镜像
COPY ./hello /      --把宿主机下的hello放到容器的/目录下面
RUN cat /hello      --run是在镜像制作的时候会执行的命令(这里是在容器里运行/hello)


3,生成镜像

[root@web-nginx myproject]# docker build -t helloapp:v1 .
---镜像名叫做helloapp
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM busybox
latest: Pulling from library/busybox
50783e0dfb64: Pull complete 
Digest: sha256:ef320ff10026a50cf5f0213d35537ce0041ac1d96e9b7800bafd8bc9eff6c693
Status: Downloaded newer image for busybox:latest
 ---> 7a80323521cc
Step 2/3 : COPY ./hello /
 ---> e7869a13aa5d
Step 3/3 : RUN cat /hello
 ---> Running in b06dcc0d04c3
hello,world
lilanqing
Removing intermediate container b06dcc0d04c3
 ---> b8ae64d0149a
Successfully built b8ae64d0149a
Successfully tagged helloapp:v
====
制作一个基础镜像是centos7,然后在里面安装nginx,指定nginx的配置文件,再把nginx启动起来

1.新建目录/mynginx
[root@lb1 myproject]# mkdir  /mynginx
[root@lb1 myproject]# cd /mynginx/
[root@lb1 mynginx]# 
2.新建Dockerfile
[root@lb1 mynginx]# vim Dockerfile
[root@lb1 mynginx]# cat Dockerfile 
FROM centos:7
ENV NGINX_VERSION   1.22.2
ENV SG  wangxin
ENV MN  hejin

#在基础镜像上安装软件epel-release  nginx  iproute vim
RUN set -x 
    && yum  install epel-release -y 
    && yum install nginx -y 
    && yum install iproute vim -y 

#容器运行起来后对外监听80端口-->iptables在dnat策略里发布80端口
EXPOSE 80
#容器接受到SIGQUIT信号会停止

STOPSIGNAL SIGQUIT

#容器启动的时候第1个执行的命令是nginx ,让nginx在前台运行,不要在后台运行,不然会导致容器退出
CMD ["nginx", "-g", "daemon off;"]
[root@lb1 mynginx]# 

3.制作镜像
[root@lb1 mynginx]# docker build -t scnginx:1.0 .

4.查看制作好的镜像
[root@lb1 mynginx]# docker images
REPOSITORY                   TAG               IMAGE ID       CREATED          SIZE
scnginx                      1.0               233fbf653769   26 seconds ago   496MB

5.启动容器
[root@lb1 mynginx]# docker run --name sc-nginx-2 -d -p 7755:80  scnginx:1.0
957c6bcbb3b90db7abd126382075ad56993dff4ec2ca02c6064d89dc5140f026
[root@lb1 mynginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
957c6bcbb3b9   scnginx:1.0       "nginx -g 'daemon of…"   3 seconds ago    Up 1 second     0.0.0.0:7755->80/tcp, :::7755->80/tcp                    sc-nginx-2
=====


使用指定的配置文件的步骤
[root@lb1 mynginx]#docker cp sc-nginx-2:/etc/nginx/nginx.conf .
修改nginx.conf
events {
    worker_connections 4096;
}
[root@lb1 mynginx]# cat Dockerfile 
FROM centos:7
ENV NGINX_VERSION   1.22.2
ENV SG  wangxin
ENV MN  hejin


#在基础镜像上安装软件epel-release  nginx  iproute vim
RUN set -x 
    && yum  install epel-release -y 
    && yum install nginx -y 
    && yum install iproute vim -y 

COPY ./nginx.conf /etc/nginx/

#容器运行起来后对外监听80端口-->iptables在dnat策略里发布80端口
EXPOSE 80
STOPSIGNAL SIGQUIT

CMD ["nginx", "-g", "daemon off;"]
[root@lb1 mynginx]# 
[root@lb1 mynginx]# ls
Dockerfile  nginx.conf
[root@lb1 mynginx]# 

制作最新版本的scnginx
[root@lb1 mynginx]# docker build -t scnginx:1.1 .

ADD和COPY都是复制宿主机里的文件或者目录 到容器里的某个目录下

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。

RUN是在制作镜像的时候执行的

CMD和ENTRYPOINT是在容器启动的时候运行的

CMD和ENTRYPOINT的区别

1,docker run启动容器的时候,可以传递参数进入给ENTRYPOINT里面的命令

2,当二者都存在的时候,CMD里的内容会成为entrypoint里的参数

docker镜像的导出

一、docker hub注册账号

二、docker export 导出(运行了在容器里的镜像) docker import导入

docker save导出(存放的镜像) docker load导入 ;docker load -i或者docker load <镜像名

在启动的时候自下而上,读取的时候自上而下

可写层在最上层 

容器的监控 

docker stats命令 可以监控cpu使用,内存,网络等

-----------------------------

prometheus容器监控

Prometheus是什么?

    --是一个监控软件,监控容器特别好,也可以监控其他非容器的内容

prometheus里有自己的数据库-->时序数据库(time series database):按照事情发生的时间记录数据的数据库

prometheus非常适合记录任何纯数字时间序列。它既适合以机器为中心的监控,也适用于高度动态的面向服务的架构监控。在微服务世界中,它对多维数据收集和查询的支持是一个特别的优势;每个普罗米修斯服务器都是独立的,不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依赖它,并且不需要设置广泛的基础结构来使用它。存储成本低,每个采样数据仅仅占用3.5byte左右的空间,上百万条时间序列,30秒间隔,保留60天,大概花200G

​
exporter:可以理解为客户机的一个程序,用来专门收集客户机的数据,发送给Prometheus服务器
pull metrics:拉取数据,Prometheus server拉取数据
TSDB:时间序列数据库
Retrieval:取数组件,主动从pushgateway或者expoter拉取指标数据
short-lived jobs:短时间任务
Pushgateway:短时间运行的程序可以主动将自己的数据push到pushgateway里存放,Prometheus server会在pushgateway拉取数据。
service discovery:
PromQL:Prometheus Query language,Prometheus时序数据据库里的查询语言。
Grafana:一个图形绘制工具,
Alertmanager:
pull和push哪个好点?
对于数据实时性,push方式更好地获取实时数据
服务器和网络的负载,可控性而言,pull更好

​

 promQL是prometheus里的sql语句,可以实现增删改查等操作

jobs理解为作业,一个运行的程序对应一个进程,长作业就是长时间的工作;长时间一直运行的程序产生的进程也(称为守护进程)

short-lived jobs短作业:短时间的工作

exporter是prometheus的agent,负责收集工作的指标给prometheus server

--------------------------------------------------------------------prometheus的安装与配置

官网https://prometheus.io/docs/introduction/overview/
非容器安装prometheus:
https://prometheus.io/docs/prometheus/latest/getting_started/
容器安装Prometheus:
https://hub.docker.com/r/prom/prometheus
非容器安装Prometheus
1,下载软件
https://prometheus.io/download/
2,解压
tar xf prometheus-2.39.1.linux-amd64.tar.gz
移动到/usr/local/prometheus
mv prometheus-2.39.1.linux-amd64/ /usr/local/prometheus
3,启动软件
cd /usr/local/prometheus
./prometheus --config.file="/usr/local/prometheus/promethrus.yml" &
###&表示在后台运行  

###查看是否启动了
看端口9090--lsof -i:9090 

1,使用容器安装

docker run -d -p 9090:9090 --name sc-prometheus-1 prom/prometheus

访问图形界面:http://ip:9090/graph

prometheus提供的数据的api:http://ip/metrics

grafana是一个出图工具,数据显示工具,比prometheus自带的web出图工具美观 

 exporter是一个数据采集工具,需要人去开发的

####################监控远程linux主机

①在远程linux主机(被监控端agent)上安装node_expoter组件

https://prometheus.io/download/
选择node_expoter

②解压安装node_expoter

tar xf node_exporter-1.4.0.linux-amd64.tar.gz
mv /usr/local/node_expoter-1.4.0.linux-amd64/ /usr/local/node_expoter

③启动node_expoter

nohup /usr/local/node_exporter/node_expoter &

④查看9100端口

lsof -i:9100

⑤在web页面查看收集情况

在浏览器使用https+被监控端ip:9100/metrics就可以查看被监控主机收集的监控信息

⑥回到prometheus服务器的配置文件里添加被监控主机的配置项

在主配置文件里添加配置
[root@server ~] vim /usr/local/prometheus/prometheus.yml
#在scrap_configs下
- job_name: 'agent1'#取一个job名称来代表被监控的机器
  static_configs:
  - target: ['192.168.173.140']#被监控主机的ip

之后重启服务
/usr/local/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
远程监控mysql
①在被管理的机器上安装musqld_exporter
https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
②解压
[root@agent1~] tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /usr/local
[root@agent1~] mv /usr/local/mysqld_exporter-0.14.0.linux-amd64
/usr/local/mysqld_exporter
[root@agent1~] ls /usr/local/mysqld_exporter/
LICENSE mysqld_exporter NOTICE
③安装mariadb数据库,并授权
[root@agent1~] yum install mariadb* -y
[root@agent1~] systemctl restart mariadb
[root@agent1~] systemctl enable mariadb
[root@agent1~] mysql
MariaDB [(none)]> grant select,replication client,process on *.* to'mysql_monitor;@'localhost' identified by '123456';
#授权ip为localhost,因为不是prometheus服务器直接找mariadb获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter再找mariadb,所以localhost是指mysql_exporter的ip 
MariaDB[(none)]> flush privileges;
MariaDB[(none)]> quit

创建一个mariadb配置文件,写上连接的用户名与密码(和上面的授权的用户名和密码要对应)

[root@agent1~]#vim/usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=123456
启动mysqld_exporter
[root@agent1~]#nohup/usr/local/mysqld_exporter/mysqld_exporter --config.my.cnf=/usr/local/mysqld_exporter/.my.cnf &

确认端口
[root@agent1 ~]#
lsof -i:9104

之后回到prometheus的配置文件添加被监控mariadb的信息
在主配置文件最后再加上下面三行
[root@server~]# vim /usr/local/prometheus/prometheus.yml
- job_name: 'agent1_mariadb'
  static_configs:
  - targets: ['10.1.1.14:9104']

grafana可视化工具

grafana是一个开源的分析和可视化工具,可以通过将采集的数据分析、查询然后进行可视化的展示并且实现报警功能

https://grafana.com/grafana/download

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.2-1.x86_64.rpm
yum install grafana-enterprise-9.2.2-1.x86_64.rpm

设置开机自启
systemctl start grafana-server
systemctl enable grafana-server
查看3000端口
lsof -i:3000或者ss -naltp|grep 3000

之后在web端输入安装了grafana主机的ip:3000
默认用户名admin
密码admin,首次登录后更改密码

####添加prometheus的数据源
①通过浏览器访问http://安装了grafana的主机ip:3000登录
②设置数据源(名称、ip、端口 等),把prometheus服务器收集的数据做为一个数据源添加到grafana,让grafana可以得到prometheus的数据。
③为添加好的数据源做图形显示
点击➕号--dashboard--增加一个图形Graph--Panel Title里的edit--选择需要呈现图形的数据(数据源选择我们添加的prometheus data,写上查询的键值,然后保存)
④匹配查询
例:node_load1{instance='192.168.173.139'}--只匹配192.168.173.139的监控项
node_load5{job-'agent'}--只匹配agent1上的监控项

为mysql显示监控数据

①在grafana上修改配置文件,并下载安装mysql监控的dashboard(包含相关json文件,这些json文件可以看作是开发人员开发的一个监控模板) 

 https://github.com/percona/grafana-dashboards
在grafana配置文件里最后加上以下三行
[root@grafana~]# vim /etc/grafana/grafana.ini
[dashboards.json]
enabled = true
path = /var/lib/grafana/dashboards
[root@grafana~]#cd /var/lib/grafana/
[root@grafana grafana]# git clone https://github.com/percona/grafana-dashboards.git
[root@grafana grafana]# cp -r
grafana-dashboards/dashboards//var/lib/grafana/
重启grafana服务
[root@grafanagrafana]# systemctl restart grafana-server

②在grafana图形界面导入相关json文件

③点import导入后,报prometheus数据源找不到,因为这些json文件里默认要找的就是叫Prometheus的数据源,但我们前面建立的数据源却是叫prometheus_data

最后

以上就是任性季节为你收集整理的docker和prometheus学习的全部内容,希望文章能够帮你解决docker和prometheus学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部