prometheus grafana监控linux mysql redis nginx fpm等

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来实现一个动态感知的效果,来做一个动态的,很适合给老板层级的看

你可能感兴趣的:(linux,prometheus,grafana,mysql,redis)