2023年3月1日08:11:07
关于服务器监控,以前都是手动htop,netstat 看下是否有异常,但是随着服务器增多,几台服务器还能手动,超过5台的话,每天巡查,就得花很多时间了,还是得有个监控方便,grafana的图形化,这块就不多赘述了,很好,很强大,加上go开发的prometheus,不论是服务端还是客户端部署都非常方便,二进制文件下载完就可以直接部署
更新包
yum update
yum install yum-utils epel-release net-tools -y
reboot
更新系统,删除不必要的kernel版本,因为docker是对内核版本是有一定要求的
rpm -q kernel
package-cleanup --oldkernel --count=1
时间同步,不然容易出问题
yum install ntp ntpdate -y
关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled
reboot
查看selinux状态
sestatus
设置 hostname
第一种 hostnamectl 修改(推荐使用)
Step1 查看主机名
hostname
Step2 修改主机名
命令形式
hostnamectl set-hostname 主机名
修改
hostnamectl set-hostname manager-01
Step3 再次查看主机名
hostname
无需重启只需新开会话便可变为新的主机名
第二种 通过修改文件
修改文件
vi /etc/hostname 添加主机名
work-01
vi /etc/sysconfig/network 添加IP和hostname对应关系
192.168.8.107 work-01
reboot
安装docker,一定按照一下流程安装docker,不然安装是其他版本,很多命令都无法使用
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
//初始化
systemctl start docker
停止,修改存储目录
systemctl stop docker
后再执行
systemctl stop docker.socket
指定docker数据目录到指定目录
mv /var/lib/docker /data/
touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
{
"registry-mirrors": ["https://hub-mirror.c.163.com"],
"data-root": "/data/docker"
}
[root@docker ~]# docker -v
Docker version 23.0.1, build a5ee5b1
所有开机服务
systemctl list-unit-files
开机启动
systemctl enable docker
安装Portainer.io,如果喜欢用界面化部署容器的可以使用,感觉还行
docker volume create portainer_data
Then, download and install the Portainer Server container:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
访问地址:
https://ip:9443
//查询容器日志,这个命令很重要,因为容器服务失败,查看失败原因经常用到
docker logs -f portainer
docker安装mysql
docker run -d -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
docker run -d -p 3306:3306 --name mysql5.7 --restart=always -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7.41-debian
进入镜像容器
docker exec -it mysql bash
docker exec -it mysql /bin/bash
查看docker系统版本
2.1.1 cat /proc/version
此命令可以查看正在运行的内核版本信息。/proc目录存储的是当前内核运行状态的一系列特殊文件,包括:内存,CPU内核,已安装文件系统等信息。
#cat /proc/version
2.1.2 uname -a
此命令可以查看电脑以及操作系统内核的相关信息。uname命令用于查看多个系统信息,包括 Linux 内核体系结构,名称版本和发行版。
#uname -a
2.2 查看Linux系统发行版本的命令
2.2.1 cat /etc/issue
此命令也可以用于查看Linux系统版本信息,但是显示的结果较为简略,只有系统名称和对应版本号。
该命令也适用于所有的 Linux 发行版。
# cat /etc/issue
2.2.2 lsb_release -a
Debian安装工具
apt update
apt-get update
apt-get install -y vim
安装 prometheus
docker 里面映射的默认config路径 /data/docker_config
docker默认data路径 /data/docker
docker pull prom/prometheus
$PWD是当前目录
docker run -d --name prometheus prom/prometheus
docker cp -a prometheus:/etc/prometheus/ $PWD/prometheus
//删除镜像
docker rm -f prometheus
//建议吧配置文件和存储放在挂在的 /data的存储上,因为假如系统挂了,重新装上系统就可以直接恢复应用
docker run -d --name prometheus -p 19090:9090 -v $PWD/prometheus:/etc/prometheus prom/prometheus
docker run -d --restart=always --name prometheus -p 9090:9090 -v $PWD/prometheus:/etc/prometheus prom/prometheus
# --web.enable-lifecycle 允许热加载配置文件
# 注意放在镜像名后面的内容为映射到内部的配置标志
level=warn deprecation_notice="'storage.tsdb.retention' flag is deprecated use 'storage.tsdb.retention.time' instead."
docker run -d \
--name=prometheus \
-p 9090:9090 \
--restart always \
--volume /data/docker_config/prometheus:/etc/prometheus \
--volume /data/docker_config/prometheus/data:/prometheus \
prom/prometheus \
--web.enable-lifecycle \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--storage.tsdb.retention.time=186d
//其他参数
--storage.tsdb.min-block-duration=
--storage.tsdb.max-block-duration=
--storage.tsdb.no-lockfile=
查看运行参数
http://127.0.0.1:9090/api/v1/status/runtimeinfo
访问地址:
http://ip:9090/
安装 pushgateway 这个对于网络不通的时候,监控隔离网络,只需要暴露一个端口就可以了,相当于网关服务
docker run -d --restart=always --name=pushgateway -p 9091:9091 prom/pushgateway
访问地址:
http://ip:9091/
安装 grafana
# 启动grafana
docker run -itd --name grafana grafana/grafana
# 复制容器内部的配置文件到宿主机,不用事先创建$PWD/prometheus目录
docker cp -a grafana:/var/lib/grafana $PWD/grafana-storage
# 删除容器
docker rm -f grafana
# 添加目录权限(不添加权限不够,容器无法启动)
chmod -R 777 grafana-storage
# 启动容器 设置端口
docker run -itd --name=grafana --restart=always -p 3000:3000 -v $PWD/grafana-storage:/var/lib/grafana grafana/grafana
# docker run 运行
# --name 容器的名称
# -p 指定容器的端口映射
# -v:挂载宿主机目录和docker容器中的目录; $PWD/grafana-storage:本地宿主机绝对目录;/var/lib/grafana:容器目录(将容器目录挂载到本地)
# --restart 容器重启策略 no:不重启,always:退出时总是重启
http://ip:3000/
修改权限
https://www.cnblogs.com/jason2018524/p/16995927.html
useradd grafana
vi /etc/passwd
472:472::/home/grafana:/bin/bash
vi /etc/group
grafana 472:
修改grafana目录所有者为grafana
[root@DL ~]# chown -R grafana:grafana grafana
chown -R grafana:grafana /opt/docker_data/grafana/
chmod -R 755 /opt/docker_data/grafana/
docker run -d \
--name grafana \
-p 3000:3000 \
--privileged=true \
-v /opt/docker_data/grafana/conf/:/etc/grafana \
-v /opt/docker_data/grafana/data/:/var/lib/grafana \
-v /opt/docker_data/grafana/logs/:/var/log/grafana \
-e TZ=Asia/Shanghai \
grafana/grafana:latest
安装 node_exporter 监控linux
docker run -d --name node-exporter --restart=always -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
docker run -d --name node-exporter --restart=always -p 9110:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
http://ip:9100/
grafana模板地址,grafana怎么使用就不说了,这个现在属于必备技能之一,很多产品或者运维都需要会使用
https://grafana.com/grafana/dashboards/
安装 mysql_exporter
docker run -d -p 9104:9104 --restart=always -e DATA_SOURCE_NAME="monitor:密码@(ip:3306)/" --name mysqld_exporter prom/mysqld-exporter
安装 redis_exporter
docker pull oliver006/redis_exporter
docker run -d --name redis_exporter \
--restart=always \
-p 9121:9121 oliver006/redis_exporter \
--redis.addr redis://172.36.233.8:6379 \
--redis.password '密码'
docker run -d \
-p 9093:9093 \
--name alertmanager \
--restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/alertmanager:/etc/alertmanager \
prom/alertmanager
安装nginx-prometheus-exporter
https://cloud.tencent.com/document/product/1416/56039
$ docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.8.0 -nginx.scrape-uri http://:8080/stub_status
nginx -V 2>&1 | grep -o with-http_stub_status_module
./configure \
… \
--with-http_stub_status_module
make
sudo make install
server {
location /nginx_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
}
k8s
services:
prometheus:
image: prom/prometheus:v2.37.2
container_name: prometheus
restart: always
ports:
- '9090:9090'
user: '0'
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus/data
- --storage.tsdb.retention=10d
- --web.enable-lifecycle
- --storage.tsdb.max-block-duration=2h
- --storage.tsdb.min-block-duration=2h
Run 'docker COMMAND --help' for more information on a command.
注意:启动之后的docker命令启动的容器参数不好修改,我尝试在
docker inspect 71c248a5acce
ResolvConfPath参数进入容器文件夹
config.v2.json这个是自动生成的,修改了也没用
resolv.conf 这个可以修改,但是能改的参数有限,
最好用 docker update --help查看有那些可以修改
注意:
如果客户端机器配置比较差,建议使用二进制直接运行,不要在docker里面运行客户端
fpm为什么没测试,单纯是因为没时间,可以参看其他的文章,还可以吧各个组件的流程串联起来,使用grafana的ImageIt来实现一个动态感知的效果,来做一个动态的,很适合给老板层级的看