文章目录
- 第一天、
- 1、初始化配置
- 1. 编写的初始化的脚本 init_env.sh
- 2. 远程拷贝初始化脚本到mysql服务器里
- 3.在mysql这台服务器上执行脚本
- 2、总结
- 第二天
- 1、yum
- yum介绍
- yum操作
- 将冯老师提供的网站的源码包上传到web服务器
- 2、部署网站
- 1、解压文件
- 2、epel源:可以提供很多centos官方没有的软件包的下载
- 3、配置go语言的国内下载资源的站点
- 4、运行go语言的网站
- 5、访问我们的网站,网站监听的端口号是8080
- 6、登录不成功,因为数据库MySQL服务器没有搭建,连接不成功
- 3、安装MySQL服务器,部署MySQL软件
- 4、数据库的初始化
- 1、建立初始的库
- 2、导入表和以前的数据
- 3、建立授权的用户,允许web网站可以连接到数据库里获取数据
- 4、将mysql客户端命令scp到web服务器上,这样web服务器就可以使用mysql这个客户端进行远程登录测试
- 5、在web服务器上登录MySQL服务器
- 5、配置数据库信息
- 1、修改网站的server.go的数据库连接地址
- 2、再次运行web程序
- 4、访问web网站
- 6、自动化运维工具ansible
- 1、介绍
- 2、安装ansible软件
- 1、初始化脚本
- 2、执行初始化脚本
- 3、服务器重启后登录
- 4、安装ansible软件,需要先安装epel源
- 5、添加主机清单,新增控制的服务器
- 2、和被控的web和MySQL之间建立免密通道
- 3、使用ansible安装软件、执行命令,体验批量管理的效果
- 第三天、Prometheus监控所有的服务器
- 1、搭建免密通道
- 1、生成公钥和私钥对
- 2、上传公钥到db服务器
- 3、验证免密通道是否建立成功
- 4、在ansible的hosts文件里修改
- 5、测试
- 2、Prometheus介绍
- 3、进制源码安装Prometheus
- 1、使用ansible下发node_exporter-1.4.0-rc.0.linux-amd64.tar.gz 到web和db服务器上
- 2、改主机名
- 3、上传下载的源码包到linux服务器,去QQ群里下载,或者找冯老师要
- 4、解压源码包
- 5、修改解压后的压缩包名字prometheus
- 6、临时和永久修改PATH变量,添加prometheus的路径
- 7、把prometheus做成一个服务来进行管理,非常方便日后维护和使用
- 8、重新加载systemd相关的服务,识别Prometheus服务的配置文件
- 9、启动Prometheus服务
- 10、设置开机启动
- 11、访问Prometheus 的web server
- 4、安装exporter
- 1、exporter介绍
- 2、将node-exporter传递到所有的服务器上的/root目录下
- 3、编写在其他机器上安装node_exporter的脚本,vim install_node_exporter.sh
- 4、使用ansible的copy模块推送脚本到db服务器
- 5、演示shell模块的使用
- 6、在ansible服务器上执行安装node_exporter的脚本
- 7、在其他的服务器上查看是否安装node_exporter成功
- 8、刚刚防火墙服务器lb2没有开机,单独给它安装node_exporter
- 9、在防火墙服务器上查看是否安装node_exporter成功
- 三、添加被监控的服务器
- 1、在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里
- 2、重启Prometheus服务
- 3、访问
- 四、安装grafana出图展示
- 1、安装,需要提前上传安装包grafana-enterprise-9.1.2-1.x86_64.rpm
- 2、启动grafana,设置开机启动
- 3、查看grafana是否启动
- 4、登录,在浏览器里登录
- 五、Grafana出图的配置
- 1、先配置prometheus的数据源
- 2、导入grafana的模板
- 六、总结
- 第四天 mysqld_exporter
- 一、YAML
- 二、 Prometheus的问题:
- 三、安装mysql的mysqld_exporter
- 1、mysqld_exporter介绍
- 2、在db服务器上下好mysql-5.7,执行脚本onekey_install_mysql_binary_v3.sh。测试登录数据库
- 3、 创建用于获取mysqld进程信息的数据库的用户exporter
- 4、 部署mysqld_exporter
- 5、mysqld_exporter做成服务
- 6、重启并设置开机启动
- 7、 在Prometheus.yml中添加mysqld_exporter的配置
- 8、登录网站查看效果
- 9、Grafana里添加支持mysqld_exporter模板
- 10、问题:
- 11、解决方法
- 12、难点
- 第五天 ansible-nginx
- 一、cron模块使用
- 1、编写一个备份脚本
- 2、查看效果
- 3、你使用过的ansible模块有哪些?
- 二、playbook
- 1、playbook介绍
- 2、在web和db服务器上执行
- 三、playbook练习
- 1、要求
- 2、在web服务器上验证
- 3、另外一个playbook,验证使用shell命令去修改配置文件
- 4、验证
- 5、总结:
- 四、nginx
- 1、nginx介绍
- 2、yum安装nginx
- 3、 启动nginx
- 4、查看进程和端口
- 5、访问网站
- 6、 yum 安装的nginx,配置文件所在的目录/etc/nginx/
- 7、 /usr/share/nginx/html 是nginx存放网站的目录
- 五、 编译安装nginx
- 1、 新安装一台web服务器,web-2,在ansible里添加进入主机清单
- 2、使用ansible去安装node_exporter
- 3、将web-1服务器上的安装脚本和源码包文件,scp到ansible机器上
- 在Prometheus server上添加 web2机器信息
- 重启Prometheus 服务
第一天、
今天上午操作:
准备2台linux服务器
使用vmware模拟2台机器 配置2c/4G/100G磁盘---》全新安装centos7.9的Linux系统
Web:网站服务器
MySQL:数据库服务器
root用户的密码设置为123456
1、初始化配置
nmcli n 查看网络接口的情况
nmcli n off 关闭所有的网络连接
nmcli n on开启所有的网络连接
ifup ens33 激活ens33网卡 interface 接口 up 起来/激活 ens33是网卡的名字
1. 编写的初始化的脚本 init_env.sh
set -e
#!/bin/bash
#第1步:下载阿里云的centos-7.reop文件
cd /etc/yum.repos.d
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
#新建存放centos官方提供的repo文件,因为官方不提供服务了
mkdir backup
mv CentOS-* backup
#第2步:修改主机名
hostnamectl set-hostname $1
#第3步:配置静态ip地址
cat >/etc/sysconfig/network-scripts/ifcfg-ens33 <<EOF
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=$2
PREFIX=24
GATEWAY=$3
DNS1=114.114.114.114
DNS2=222.246.129.80
EOF
#启动网络服务
service network restart
#第4步: 关闭selinux和firewalld防火墙服务
systemctl stop firewalld
systemctl disable firewalld
#修改/etc/selinux/config文件里的enforcing为disabled
sed -i '/SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
#重启服务器
reboot
2. 远程拷贝初始化脚本到mysql服务器里
MySQL服务器的ip 192.168.205.133
[root@web-1 ~]# scp init_env.sh 192.168.205.133:/root
3.在mysql这台服务器上执行脚本
[root@localhost ~]# bash init_env.sh mysql 192.168.205.133 192.168.205.2
2、总结
总结今天的内容:
1.安装了centos7.9的系统
2.使用阿里云的repo文件(仓库文件)
3.修改主机名
4.修改为静态ip地址--》好处是ip地址不变
5.修改selinux的状态和禁用firewalld防火墙服务
6.将整个初始化环境脚本化
4. 部署web服务(go语言编写的)
5. 部署MySQL服务
第二天
1、yum
yum介绍
yum 是一段英文的缩写 redhat yellowdog package updater manager 红帽公司开发的一个专门用于软件包管理工具 ---》python
Yellowdog Updater Modified
yum操作
yum install tree 安装
yum remove tree 卸载
yum update tree 升级
yum provides nslookup 查询nslookup命令是通过哪个软件安装过来的
yum list 查询哪些软件安装了,哪些没有安装
yum info tree查看软件的信息
问渠那得清如许,为有源头活水来
源--》仓库,存放软件的地方
仓库 repository
centos-7.repo 仓库文件,用来定位需要使用的源
定位你的仓库路径的文件 ---》藏宝图
将冯老师提供的网站的源码包上传到web服务器
2、部署网站
1、解压文件
[root@web-1 web]# unzip go+html+mysql+redis.zip
以上网站是刘珍老师使用go语言开发的一个网站
server.go 是web的核心应用程序
Readme.md 使用手册
安装go语言环境
[root@web-1 web]# yum install golang -y
docker,k8s,Prometheus,ETCD都是使用go语言开发的
2、epel源:可以提供很多centos官方没有的软件包的下载
yum install epel-release -y
3、配置go语言的国内下载资源的站点
[root@web-1 web]# go env -w GOPROXY=https://goproxy.cn,direct
[root@web-1 web]# go mod init web
将需要依赖的库下载到本地
[root@web-1 web]# go mod tidy
4、运行go语言的网站
[root@web-1 web]# pwd
/web
[root@web-1 web]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go static templates
[root@web-1 web]# go run server.go
5、访问我们的网站,网站监听的端口号是8080
6、登录不成功,因为数据库MySQL服务器没有搭建,连接不成功
3、安装MySQL服务器,部署MySQL软件
[root@mysql ~]# ls
anaconda-ks.cfg init_env.sh mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz onekey_install_mysql_binary_v3.sh
[root@mysql ~]#
[root@mysql ~]# bash onekey_install_mysql_binary_v3.sh
su 重新登录加载新的PATH--》有mysql命令路径
[root@mysql ~]# mysql -uroot -p'Sanchuang123#'
-uroot 指定用户 user
-p 指定密码 password
4、数据库的初始化
1、建立初始的库
create database users;
2、导入表和以前的数据
info.sql 是原来从数据库里导出的数据文件
192.168.205.133 是数据库服务器
[root@web-1 web]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go static templates
[root@web-1 web]# scp info.sql 192.168.205.133:/root
导入数据到MySQL服务器里
[root@mysql ~]# mysql -uroot -p'Sanchuang123#' users < info.sql
3、建立授权的用户,允许web网站可以连接到数据库里获取数据
root@mysql 15:08 mysql>create user 'scweb'@'192.168.205.132' identified by 'Scweb123';
授予'scweb'@'192.168.205.132'这个用户可以对users库里的所有的表进行全部权限的操作,包括增删改查等
root@mysql 15:11 mysql>grant all on users.* to 'scweb'@'192.168.205.132';
4、将mysql客户端命令scp到web服务器上,这样web服务器就可以使用mysql这个客户端进行远程登录测试
[root@mysql ~]# cd /usr/local/mysql/bin
[root@mysql bin]# scp mysql 192.168.205.132:/usr/bin
查看MySQL服务器开放的端口号
[root@mysql bin]# yum install net-tools -y
5、在web服务器上登录MySQL服务器
192.168.205.133 是数据库服务器的ip
-h 指定数据库服务器的ip地址 host
[root@web-1 web]# mysql -h 192.168.205.133 -uscweb -p'Scweb123'
[root@web-1 web]# yum repolist
5、配置数据库信息
1、修改网站的server.go的数据库连接地址
[root@web-1 web]# cd /web
[root@web-1 web]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go static templates
[root@web-1 web]# vim server.go
//mysql连接和 Redis 连接
var db *sql.DB
var rdb *redis.Client
const (
DB_USER = "scweb"
DB_PASSWORD = "Scweb123"
DB_NAME = "users"
DB_HOST = "tcp(192.168.205.133:3306)/"
REDIS_HOST = "192.168.205.133:6379"
)
2、再次运行web程序
[root@web-1 web]# go run server.go
4、访问web网站
[root@mysql yum.repos.d]# mysql -uroot -p'Sanchuang123#'
6、自动化运维工具ansible
1、介绍
1. 批量操作、批量管理服务器
ansible是使用python开发的一个自动化运维工具,用来对服务器进行批量管理和操作。
ansible的核心组件:
1. 主机清单 Host Inventory: 里面写好了可以控制的服务器的ip地址--》控制的机器清单
2. 模块 modules: ansible可以使用的工具箱
3. 插件: 也是ansible可以使用的工具
4. playbook 剧本: ansbile需要在主机上执行的事情。
ansible 是导演
主机清单:演员名单
模块和插件: 道具
playbook: 剧本
2、安装ansible软件
1、初始化脚本
scp init_env.sh 192.168.205.134:/root
2、执行初始化脚本
[root@localhost ~]# bash init_env.sh ansible 192.168.205.134 192.168.205.2
3、服务器重启后登录
4、安装ansible软件,需要先安装epel源
[root@ansible .ssh]# yum install epel-release -y
[root@ansible .ssh]# yum install ansible -y
5、添加主机清单,新增控制的服务器
[root@ansible ~]# cd /etc/ansible/
[root@ansible ansible]# ls
ansible.cfg hosts roles
[root@ansible ansible]# yum install vim -y
[root@ansible ansible]# vim hosts
[web]
192.168.205.132 ansible_ssh_user='root' ansible_ssh_pass='123456'
[db]
192.168.205.133 ansible_ssh_user='root' ansible_ssh_pass='123456'
测试
ansible db -m shell -a "ip add"
db 表示操纵的组
-m shell 调用shell模块去执行命令
-a "ip add" 具有需要去执行的命令
在所有的被控机器上执行命令
分组 all
2、和被控的web和MySQL之间建立免密通道
3、使用ansible安装软件、执行命令,体验批量管理的效果
第三天、Prometheus监控所有的服务器
1、搭建免密通道
1、生成公钥和私钥对
[root@ansible ~]# ssh-keygen
[root@ansible ~]# cd /root/.ssh/
[root@ansible .ssh]# ll
总用量 12
-rw------- 1 root root 1675 7月 4 11:15 id_rsa
-rw-r--r-- 1 root root 394 7月 4 11:15 id_rsa.pub
-rw-r--r-- 1 root root 354 7月 3 17:11 known_hosts
2、上传公钥到db服务器
[root@ansible .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.205.133
root@192.168.205.133's password:
输入密码
3、验证免密通道是否建立成功
[root@ansible .ssh]# ssh 'root@192.168.205.133'
4、在ansible的hosts文件里修改
[root@ansible .ssh]# cd /etc/ansible/
[root@ansible ansible]# ls
ansible.cfg hosts roles
[root@ansible ansible]# vim hosts
[web]
192.168.205.132 ansible_ssh_user='root' ansible_ssh_pass='123456'
[db]
192.168.205.133
5、测试
[root@ansible ansible]# ansible db -m shell -a "ip add"
2、Prometheus介绍
Prometheus is an open-source systems monitoring and alerting toolkit
Prometheus是一个开源的监控和报警系统。
监控什么?
系统性能(cpu、内存、磁盘容量、磁盘IO、网络流量)
卡顿、访问不了、死机
监控的意义?
有问题及时解决
没有问题,及早发现问题,提前防止事故发生。
监控软件:
1. 开源的 Prometheus 免费的
2. 自研
核心组件:
(1) Prometheus server :存储数据(TSDB)、提供访问数据的接口的(HTTP)
(2) exporter 收集数据的
(3) altermanager ---》--》设置阈值 cpu 80%--》报警
(4) 数据可视化工具: web UI ---》user interface 用户界面
(5) pushgateway: 是一个中间件(代理程序)---》分布式
如何报警?
短信、钉钉、微信、电话、邮件等
场景题:
[root@mysql ~]# crontab -l
50 3 23 2 * bash /root/mkdir.sh
分 小时 日 月
[root@mysql ~]#
* */3 * * *
3、进制源码安装Prometheus
1、使用ansible下发node_exporter-1.4.0-rc.0.linux-amd64.tar.gz 到web和db服务器上
[root@ansible ~]# ansible all -m copy -a "src=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
[root@ansible ~]# ansible all -m fetch -a "src=/etc/passwd dest=/root"
这条命令会遍历所有的受管节点,从每个节点上复制其/etc/passwd文件,并根据各个节点的主机名在控制节点的/root目录下创建对应的文件副本。
2、改主机名
[root@nfs-ansible ansible]# hostnamectl set-hostname nfs-ansible-prom
3、上传下载的源码包到linux服务器,去QQ群里下载,或者找冯老师要
[root@nfs-ansible-prom ansible]# mkdir /prom
[root@nfs-ansible-prom ansible]# cd /prom
[root@nfs-ansible-prom prom]# ls
grafana-enterprise-9.1.2-1.x86_64.rpm prometheus-2.43.0.linux-amd64.tar.gz
node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
4、解压源码包
tar xf prometheus-2.43.0.linux-amd64.tar.gz
5、修改解压后的压缩包名字prometheus
mv prometheus-2.43.0.linux-amd64 prometheus
6、临时和永久修改PATH变量,添加prometheus的路径
[root@nfs-ansible-prom prom]# PATH=/prom/prometheus:$PATH
[root@nfs-ansible-prom prom]# echo 'PATH=/prom/prometheus:$PATH' >>/etc/profile
[root@nfs-ansible-prom prom]#
[root@nfs-ansible-prom prom]# which prometheus
/prom/prometheus/prometheus
7、把prometheus做成一个服务来进行管理,非常方便日后维护和使用
[root@nfs-ansible-prom prom]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
8、重新加载systemd相关的服务,识别Prometheus服务的配置文件
[root@nfs-ansible-prom prom]# systemctl daemon-reload
[root@nfs-ansible-prom prom]#
9、启动Prometheus服务
[root@nfs-ansible-prom prom]# systemctl start prometheus
[root@nfs-ansible-prom prom]# systemctl restart prometheus
[root@nfs-ansible-prom prom]# ps aux|grep prome
root 2740 2.7 0.9 798956 37312 ? Ssl 14:57 0:00 /prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
root 2748 0.0 0.0 112824 976 pts/0 S+ 14:57 0:00 grep --color=auto prome
10、设置开机启动
[root@nfs-ansible-prom prom]# systemctl enable prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
11、访问Prometheus 的web server
http://192.168.203.135:9090
4、安装exporter
1、exporter介绍
export 出口/输出 exporter
import 进口
第2步:在整个web集群节点服务器(任何一台linux系统,例如nfs、mysql、web1、web2、LB1、LB2等)上安装exporter程序
exporter 是Prometheus的客户端的数据采集工具--》go语言编写的
node-exporter 是专门用来采集节点服务器的通用性能指标(cpu、内存、磁盘、网速等)
2、将node-exporter传递到所有的服务器上的/root目录下
scp node_exporter-1.4.0-rc.0.linux-amd64.tar.gz root@192.168.203.144:/root
exporter
scp node_exporter-1.4.0-rc.0.linux-amd64.tar.gz root@192.168.203.147:/root
或者
ansible all -m copy -a 'src=node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/'
3、编写在其他机器上安装node_exporter的脚本,vim install_node_exporter.sh
#!/bin/bash
tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /
cd /
mv node_exporter-1.4.0-rc.0.linux-amd64/ node_exporter
cd /node_exporter/
echo 'PATH=/node_exporter/:$PATH' >>/etc/profile
#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
[Service]
ExecStart=/node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl enable node_exporter
#启动node_exporter
systemctl start node_exporter
4、使用ansible的copy模块推送脚本到db服务器
ansible db -m copy -a "src=install_node_exporter.sh dest=/root"
5、演示shell模块的使用
[root@mysql ~]# cat mkdir.sh
mkdir sc{1..100}
[root@ansible prometheus]# ansible db -m shell -a "bash /root/mkdir.sh"
ansible db -m script -a "/prome/prometheus/install_node_exporter.sh"
shell模块和script模块的区别 shell模块执行的脚本,需要提前copy到其他的机器上
script模块不需要提前将脚本传输到其他机器,直接在ansible机器上执行就可以,会自动先推送文件到执行脚本的机器上,执行完后删除脚本
6、在ansible服务器上执行安装node_exporter的脚本
ansible all -m script -a "/prom/install_node_exporter.sh"
7、在其他的服务器上查看是否安装node_exporter成功
[root@lb2 ~]# ps aux|grep node
root 5408 0.0 0.2 716288 11068 ? Ssl 15:25 0:00 /node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
root 5524 0.0 0.0 112824 976 pts/1 S+ 15:27 0:00 grep --color=auto node
8、刚刚防火墙服务器lb2没有开机,单独给它安装node_exporter
[root@lb2 ~]#
ansible fw -m copy -a 'src=node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/'
ansible fw -m script -a "/prom/install_node_exporter.sh"
9、在防火墙服务器上查看是否安装node_exporter成功
[root@firewall ~]# ps aux|grep node
root 681 0.0 0.3 716544 13088 ? Ssl 15:27 0:00 /node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
root 1705 0.0 0.0 112828 976 pts/0 S+ 15:29 0:00 grep --color=auto node
三、添加被监控的服务器
1、在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里
[root@nfs-ansible-prom prometheus]# pwd
/prom/prometheus
[root@nfs-ansible-prom prometheus]# vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
#添加下面的配置
- job_name: "web1"
static_configs:
- targets: ["192.168.203.133:9090"]
- job_name: "web2"
static_configs:
- targets: ["192.168.203.134:9090"]
- job_name: "lb1"
static_configs:
- targets: ["192.168.203.136:9090"]
- job_name: "lb2"
static_configs:
- targets: ["192.168.203.137:9090"]
- job_name: "fw"
static_configs:
- targets: ["192.168.203.138:9090"]
2、重启Prometheus服务
[root@nfs-ansible-prom prometheus]# service prometheus restart
Redirecting to /bin/systemctl restart prometheus.service
3、访问
在windows的浏览器访问
http://192.168.203.135:9090/targets
四、安装grafana出图展示
1、安装,需要提前上传安装包grafana-enterprise-9.1.2-1.x86_64.rpm
yum install grafana-enterprise-9.1.2-1.x86_64.rpm -y
2、启动grafana,设置开机启动
systemctl start grafana-server
systemctl enable grafana-server
3、查看grafana是否启动
[root@nfs-ansible-prom prom]# ps aux|grep grafana
4、登录,在浏览器里登录
http://192.168.203.135:3000
默认的用户名和密码是
用户名admin
密码admin
修改一个新密码123456,然后会进入下面的图形
五、Grafana出图的配置
1、先配置prometheus的数据源
管理--》数据源--》add new data source-->prometheus
填写好配置
点击测试是否能成功连接到Prometheus 时序数据库
2、导入grafana的模板
点击Dashboards 进入仪表盘设置
点击import直接导入模板
输入8919模板,点击load
给模板起一个名字,然后选择Prometheus数据库,最后点击import
进入dashboard界面,看到非常漂亮的监控效果图
https://grafana.com/grafana/dashboards
步骤:
1.需要知道哪些模板可以使用,可以去官方找,也可以百度
1-node-exporter-for-prometheus-dashboard-cn-v20200628_rev1.json
2.导入模板
创建文件夹,存放模板 sanchuang
Dashboards --》Import dashboard
这2个模板ID非常好用,推荐使用
1860
8919 -->推荐使用,因为是中文版的字符
六、总结
1. ansible的使用
(1) 模块: copy、fetch、shell、script
2. Prometheus 普罗米修斯: 监控软件、时序数据库
(1) server
(2) exporter
源码解压安装--》service文件,方便systemctl来进行管理、启动
nohup
systemctl
信号
第四天 mysqld_exporter
一、YAML
YAML(YAML Ain't Markup Language,YAML 不是一种标记语言)是一种直观的数据序列化格式,设计用于人类易于阅读和编写,同时也易于机器解析和生成。它广泛用于配置文件、数据交换以及脚本语言中的数据结构表示。YAML 的设计目标是简单、直观且易于实现。
YAML文件是存放数据的文件,它广泛用于配置文件、数据交换以及脚本语言中的数据结构表示。
Prometheus、k8s、docker等
在windows的浏览器访问
http://192.168.203.135:9090/targets
二、 Prometheus的问题:
如何访问Prometheus TSDB时序数据库?
PromSQ 你是否了解?
三、安装mysql的mysqld_exporter
1、mysqld_exporter介绍
MySQL的exporter --》可以获取MySQL内部的性能指标
1.安装了node_exporter -->获取mysql服务器的cpu、内存、磁盘IO、网络IO、进程等信息 监听:9090
2.安装mysqld_exporter -->获取MySQL内部的性能指标
监听:9104
所有的exporter本质上是一个程序,运行起来就是一个进程,可以理解为一个接口API
application interface 应用程序接口
很多exporter本质是一个web系统,对外提供API接口 --》gin框架
目前我们安装的是通用的node_exporter
[root@db-mysql ~]# ps aux|grep node
root 686 0.1 0.5 717952 20544 ? Ssl 09:39 0:01 /node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
root 1713 0.0 0.0 112828 988 pts/0 S+ 09:55 0:00 grep --color=auto node
[root@db-mysql ~]#
接下来我们安装mysqld_exporter代理程序(agent)
2、在db服务器上下好mysql-5.7,执行脚本onekey_install_mysql_binary_v3.sh。测试登录数据库
[root@db ~]# mysql -uroot -p'Sanchuang123#'
3、 创建用于获取mysqld进程信息的数据库的用户exporter
root@(none) 18:58 mysql>
CREATE USER 'exporter'@'%' IDENTIFIED BY 'Sanchuang123' WITH MAX_USER_CONNECTIONS 3;
对用户exporter进行授权,授予PROCESS, REPLICATION CLIENT, SELECT 三种权限,在任何的库里的任何表上。
root@(none) 18:58 mysql>
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
4、 部署mysqld_exporter
需要提前上传下载的mysqld_exporter-0.15.0.linux-amd64.tar.gz
[root@db ~]# tar xf mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /usr/local
[root@db ~]# cd /usr/local/
[root@db local]# mv mysqld_exporter-0.15.0.linux-amd64 mysqld_exporter
[root@db-mysql local]# cd mysqld_exporter/
.my.cnf是mysqld_exporter用于登录mysqld进程的配置文件
[root@db-mysql mysqld_exporter]# ls
LICENSE mysqld_exporter NOTICE
[root@db-mysql mysqld_exporter]#
[root@db-mysql mysqld_exporter]# vim .my.cnf
[client]
user=exporter
password=Sanchuang123
5、mysqld_exporter做成服务
[root@db mysqld_exporter]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
[Service]
Environment=DATA_SOURCE_NAME=exporter:Sanchuang123@(localhost:3306)/
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf --web.listen-address=:9104
Restart=on-failure
[Install]
WantedBy=multi-user.target
6、重启并设置开机启动
systemctl daemon-reload
systemctl enable mysqld_exporter
7、 在Prometheus.yml中添加mysqld_exporter的配置
[root@nfs-ansible-prom prom]# vim /prom/prometheus/prometheus.yml
- job_name: "db_mysqld_exporter"
static_configs:
- targets: ["192.168.203.147:9104"]
[root@nfs-ansible-prom prom]# systemctl restart prometheus
[root@nfs-ansible-prom prom]# systemctl status prometheus
8、登录网站查看效果
9、Grafana里添加支持mysqld_exporter模板
https://grafana.com/grafana/dashboards/
添加mysqld_exporter模板,编号17320,14077
10、问题:
Grafana出图的时候,很多参数没有数据,报错是no data
分析日志/var/log/messages看到时mysqld_exporter连接到mysqld数据库出现了问题,主要是密码里有#号导致,因为#是注释在配置文件里
[root@db-mysql mysqld_exporter]# vim .my.cnf
[client]
user=exporter
password=Sanchuang123#
11、解决方法
解决方法:
1. 将配置文件里的密码修改为Sanchuang123
[root@db-mysql mysqld_exporter]# vim .my.cnf
[client]
user=exporter
password=Sanchuang123#
2. 同时到mysql里修改exporter用户的密码为Sanchuang123
alter USER 'exporter'@'%' IDENTIFIED BY 'Sanchuang123' WITH MAX_USER_CONNECTIONS 3;
12、难点
Prometheus深入去学习的点
1. PromQL数据类型和方法
2. 如何自己制作grafana出图的模版
3. metrics 指标
第五天 ansible-nginx
一、cron模块使用
1、编写一个备份脚本
[root@ansible-prome ansible]# cd /etc/ansible/
[root@ansible-prome ansible]# ls
ansible.cfg hosts roles
[root@ansible-prome ansible]# vim backup_file.sh
[root@ansible-prome ansible]# vim backup_file.sh
[root@ansible-prome ansible]# cat backup_file.sh
set -e
#!/bin/bash
#/etc/passwd /etc/shadow /var/log
mkdir -p /backup
tar czf /backup/$(date +%Y%m%d)_passwd_shadow_log.tar.gz /etc/passwd /etc/shadow /var/log
[root@ansible-prome ansible]#
先在所有的节点服务器上创建/backup目录
[root@ansible-prome ansible]# ansible all -m shell -a "mkdir -p /backup"
[root@ansible-prome ansible]# ansible all -m copy -a "src=/etc/ansible/backup_file.sh dest=/backup"
每天的2:30执行
[root@ansible-prome ansible]# ansible all -m cron -a "minute=30 hour=2 job='bash /backup/backup_file.sh' name=backup_file "
2、查看效果
[root@mysql backup]# crontab -l
50 3 23 2 * bash /root/mkdir.sh
#Ansible: backup_file
30 2 * * * bash /backup/backup_file.sh
[root@mysql backup]#
3、你使用过的ansible模块有哪些?
copy fetch
shell script
yum cron service
playbook是否是必须的?
不是必须得,可以script模块,去执行脚本也可以达到playbook的效果,批量在很多机器同时执行很多的任务
二、playbook
1、playbook介绍
playbook是Ansible的配置,部署和编排的语言。
playbook 是ansible内部的脚本,可以批量的去完成很多操作。
[root@ansible-prome playbooks]# mkdir /playbook
[root@ansible-prome playbooks]# cd /playbook/
[root@ansible-prome playbook]#
[root@ansible-prome playbook]# cat redis_first.yaml
- hosts: web
remote_user: root
tasks:
- name: install redis
yum: name=redis state=installed
- name: start redis
service: name=redis state=started enabled=true
- name: create crontab
cron: minute=30 hour=3 job='bash /backup/backup_file.sh' name=backup_file2
- hosts: db
remote_user: root
tasks:
- name: install redis
yum: name=redis state=installed
- name: start redis
service: name=redis state=started enabled=true
- name: create crontab
cron: minute=30 hour=3 job='bash /backup/backup_file.sh' name=backup_file2
测试
[root@ansible-prome playbook]# ansible-playbook --syntax-check redis_first.yaml
执行
[root@ansible-prome playbook]# ansible-playbook redis_first.yaml
2、在web和db服务器上执行
[root@web-1 ~]# crontab -l
#Ansible: backup_file
30 2 * * * bash /backup/backup_file.sh
#Ansible: backup_file2
30 3 * * * bash /backup/backup_file.sh
[root@web-1 ~]# ps aux|grep redis
redis 3034 0.2 0.3 143056 5788 ? Rsl 17:32 0:00 /usr/bin/redis-server 127.0.0.1:6379
root 3100 0.0 0.0 112824 988 pts/0 R+ 17:34 0:00 grep --color=auto redis
三、playbook练习
1、要求
练习:
1.你使用的ansible什么版本?
2.任务:使用playbook完成
0.卸载nginx
1.yum安装nginx
2.修改nginx的配置的端口号9900
sed命令--》shell
手工修改配置里的端口号
3.将配置文件下发到所有的node节点服务器
4.启动nginx
5.卸载tree命令软件
6.在所有的node节点服务器上新建/scbackup目录
7.编写一个脚本backup_file.sh 实现备份/etc/passwd和/etc/shadow文件到/backup下,文件名里包含当天的日期,例如2019-7-10-passwd_shadow.tar.gz 添加一个计划任务,每天的5:30去执行,在所有的node节点服务器上实施。
install_nginx.yaml
[root@ansible-prome ansible]# cd /playbook/
[root@ansible-prome playbook]# ls
192.168.205.133 redis.conf redis_first.yaml redis_second.yaml redis_third.yaml
[root@ansible-prome playbook]#
先准备一个nginx.conf配置文件
[root@ansible-prome playbook]# yum install nginx -y
[root@ansible-prome playbook]# cp /etc/nginx/nginx.conf /playbook/
[root@ansible-prome playbook]# vim /playbook/nginx.conf
listen 9900; #将80修改为9900
listen [::]:9900; #将80修改为9900
[root@ansible-prome playbook]# vim install_nginx.yaml
[root@ansible-prome playbook]# cat install_nginx.yaml
- hosts: web
remote_user: root
tasks:
- name: remove nginx
yum: name=nginx state=removed
- name: install nginx
yum: name=nginx state=installed
- name: copy nginx.conf file
copy: src=/playbook/nginx.conf dest=/etc/nginx/nginx.conf
# - name: use sed modify nginx.conf
# shell: sed -i '/listen/ s/80/9900/' /etc/nginx/nginx.conf
- name: start nginx
service: name=nginx state=started
- name: remove tree
yum: name=tree state=removed
- name: mkdir /scbackup
shell: mkdir -p /scbackup
- name: crontab
cron: minute=30 hour=5 job='bash /backup/backup_file.sh' name=backup_file3
[root@ansible-prome playbook]# ansible-playbook --syntax-check install_nginx.yaml
playbook: install_nginx.yaml
[root@ansible-prome playbook]#
执行playbook脚本
[root@ansible-prome playbook]# ansible-playbook install_nginx.yaml
2、在web服务器上验证
[root@web-1 web]# ps aux|grep nginx
root 3695 0.0 0.0 39312 940 ? Ss 12:01 0:00 nginx: master process /usr/sbin/nginx
nginx 3697 0.0 0.0 39700 1564 ? S 12:01 0:00 nginx: worker process
root 3861 0.0 0.0 112824 988 pts/0 R+ 12:01 0:00 grep --color=auto nginx
[root@web-1 web]# netstat -anplut|grep nginx
tcp 0 0 0.0.0.0:9900 0.0.0.0:* LISTEN 3695/nginx: master
tcp6 0 0 :::9900 :::* LISTEN 3695/nginx: master
[root@web-1 web]# crontab -l
#Ansible: backup_file
30 2 * * * bash /backup/backup_file.sh
#Ansible: backup_file2
30 3 * * * bash /backup/backup_file.sh
#Ansible: backup_file3
30 5 * * * bash /backup/backup_file.sh
3、另外一个playbook,验证使用shell命令去修改配置文件
[root@ansible-prome playbook]# cat install_nginx.yaml
- hosts: db
remote_user: root
tasks:
- name: remove nginx
yum: name=nginx state=removed
- name: install nginx
yum: name=nginx state=installed
# - name: copy nginx.conf file
# copy: src=/playbook/nginx.conf dest=/etc/nginx/nginx.conf
- name: use sed modify nginx.conf
shell: sed -i '/listen/ s/80/9900/' /etc/nginx/nginx.conf
- name: start nginx
service: name=nginx state=started
- name: remove tree
yum: name=tree state=removed
- name: mkdir /scbackup
shell: mkdir -p /scbackup
- name: crontab
cron: minute=30 hour=5 job='bash /backup/backup_file.sh' name=backup_file3
[root@ansible-prome playbook]#
[root@ansible-prome playbook]# ansible-playbook install_nginx.yaml
4、验证
[root@mysql ~]# ps aux|grep nginx
root 8868 0.0 0.0 112824 988 pts/0 S+ 12:03 0:00 grep --color=auto nginx
[root@mysql ~]# ps aux|grep nginx
root 9387 0.0 0.0 39312 936 ? Ss 12:05 0:00 nginx: master process /usr/sbin/nginx
nginx 9388 0.0 0.0 39700 1824 ? S 12:05 0:00 nginx: worker process
nginx 9389 0.0 0.0 39700 1560 ? S 12:05 0:00 nginx: worker process
root 9560 0.0 0.0 112824 988 pts/0 S+ 12:05 0:00 grep --color=auto nginx
[root@mysql ~]# netstat -anplut|grep nginx
tcp 0 0 0.0.0.0:9900 0.0.0.0:* LISTEN 9387/nginx: master
tcp6 0 0 :::9900 :::* LISTEN 9387/nginx: master
[root@mysql ~]#
5、总结:
1. 搭建了一个go语言开发的web网站
(1) 刘老师研发的一个web网站--》go
2. 搭建了MySQL数据库服务器
3. ansbile自动化运维工具
4. 监控Prometheus
四、nginx
1、nginx介绍
nginx的web服务器软件
1. web软件--》支持静态-->http server
2. 负载均衡--》中间件 --->reverse proxy server 反向代理服务器
k8s--》ingress
负载均衡: load balance --》LB
反向代理服务器也是负载均衡服务器
2、yum安装nginx
[root@web-1 yum.repos.d]# yum install nginx -y
3、 启动nginx
[root@web-1 yum.repos.d]# systemctl start nginx
4、查看进程和端口
[root@web-1 yum.repos.d]# ps aux|grep nginx
root 4238 0.0 0.0 49076 1008 ? Ss 15:25 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 4239 0.0 0.1 49472 1908 ? S 15:25 0:00 nginx: worker process
root 4242 0.0 0.0 112824 984 pts/0 R+ 15:25 0:00 grep --color=auto nginx
[root@web-1 yum.repos.d]#
查看端口
[root@web-1 yum.repos.d]# netstat -anplut|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4238/nginx: master
[root@web-1 yum.repos.d]#
5、访问网站
6、 yum 安装的nginx,配置文件所在的目录/etc/nginx/
[root@web-1 system]# cd /etc/nginx/
[root@web-1 nginx]# ls
conf.d default.d fastcgi_params mime.types modules nginx.conf nginx.conf.rpmsave scgi_params uwsgi_params
nginx.conf 配置文件: 给nginx进程传参
7、 /usr/share/nginx/html 是nginx存放网站的目录
[root@web-1 conf.d]# cd /usr/share/nginx/html/
[root@web-1 html]# ls
50x.html index.html
[root@web-1 html]#
index.html 首页 ---》访问一个网站,第一个看到的页面
超链接:
vim index.html
http://192.168.205.132/luo.html
五、 编译安装nginx
1、 新安装一台web服务器,web-2,在ansible里添加进入主机清单
[root@ansible-prome ansible]# vim hosts
[web2]
192.168.205.135 ansible_ssh_user='root' ansible_ssh_pass='123456'
[root@ansible-prome ansible]# ssh root@192.168.205.135
The authenticity of host '192.168.205.135 (192.168.205.135)' can't be established.
ECDSA key fingerprint is SHA256:KoJyn5w+0AtY83GpiCKAdpMryo2G9rmawcLP/rdYXns.
ECDSA key fingerprint is MD5:d0:bd:ee:53:40:29:6e:08:df:c2:22:f4:86:66:76:52.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.205.135' (ECDSA) to the list of known hosts.
root@192.168.205.135's password:
Last login: Sat Jul 6 17:06:31 2024 from 192.168.205.1
[root@localhost ~]# exit
登出
Connection to 192.168.205.135 closed.
ansible web2 -m script -a "/etc/ansible/init_env_1.sh web-2 192.168.205.135 192.168.205.2"
ansible web2 -m script -a "/etc/ansible/init_env_1.sh web-2 192.168.146.133
192.168.146.2"
验证:使用ansible去执行初始化的操作不是特别方便,主要是脚本里有reboot命令,会重启服务器
2、使用ansible去安装node_exporter
3、将web-1服务器上的安装脚本和源码包文件,scp到ansible机器上
[root@web-1 ~]# scp install_node_exporter.sh root@192.168.205.134:/etc/ansible
root@192.168.205.134's password:
install_node_exporter.sh 100% 699 25.8KB/s 00:00
[root@ansible-prome ansible]# ls
ansible.cfg backup_file.sh hosts init_env_1.sh install_node_exporter.sh node_exporter-1.4.0-rc.0.linux-amd64.tar.gz roles
[root@ansible-prome ansible]# ansible web2 -m copy -a "src=node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root"
[root@ansible-prome ansible]# ansible web2 -m script -a "install_node_exporter.sh"
在Prometheus server上添加 web2机器信息
[root@ansible-prome playbook]# cd /prome/prometheus
[root@ansible-prome prometheus]# vim prometheus.yml
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
static_configs:
- targets: ["192.168.205.134:9090"]
- job_name: "web-1"
static_configs:
- targets: ["192.168.205.132:9090"]
- job_name: "db_node"
static_configs:
- targets: ["192.168.205.133:9090"]
- job_name: "db_mysql"
static_configs:
- targets: ["192.168.205.133:9104"]
- job_name: "web-2"
static_configs:
- targets: ["192.168.205.135:9090"]
重启Prometheus 服务
[root@ansible-prome prometheus]# systemctl restart prometheus
[root@ansible-prome prometheus]#