### 运维方案之linux服务器篇 > 1.为了更好地监控线上项目运行状态,我们从互联网选取了比较优秀的项目状态可视化管理、监控方案,`node_exporter`、 `prometheus` 、 `grafana` 组合。 > 2.在本方案部署之前,您可以先迅速拖动鼠标到底部,查看最终效果图,增加阅读本文档的耐心,或者您也可以直接点击右侧,预览最终效果图:[服务器监控效果图](https://grafana.com/grafana/dashboards/8919) > 3.核心软件简要介绍: ```code # 详细功能以及架构图请自行从百度了解,这里我们作为一个使用者了解一下核心功能。 node_exporter: 在 9100 端口启动一个服务,自身抓取linux系统底层的运行状态数据,例如:cpu状态、内存占用、磁盘占用、网络传输状态等,等待其他上层服务软件抓取。 prometheus : 从 node_exporter 提供的服务端口 9100 主动获取数据,存储在自带的数据库 TSDB. grafana : 数据展示系统,从 prometheus 提供的接口获取数据,最终展示给用户。 ``` #### 基础软件的安装,以centos为例 > 1.docker 安装,如果已安装直接进入第2步。 ```code # 移除老版本相关的残留信息 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine #安装一些依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 #设置镜像源为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast #安装docker免费版本(社区版) yum -y install docker-ce #启动docekr服务 systemctl start docker ``` > 2.本次核心软件安装、配置 ```code #拉取本次三个核心镜像 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana # 获取本机ip,以备后用。 ifconfig ,例如我的服务器内网ip: 172.19.130.185 ,后续命令请自行替换为自己的实际ip # 启动 node-exporter #注意替换ip为自己的ip docker run --name node_exporter -d -p 172.19.130.185:9100:9100 -e TZ=Asia/Shanghai -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter # 将将配置文件放置在以下目录,备docker映射使用。没有目录自行创建 /opt/prometheus/prometheus.yml # #配置文件参考:https://wwa.lanzous.com/iCFFofevdgj #核心配置部分 scrape_configs: #The job name is added as a label `job=` to any timeseries scraped from this config. - job_name: 'prometheus' static_configs: - targets: ['172.19.130.185:9090'] labels: instance: "prometheus" - job_name: "阿里云服务器" # 必须唯一,设置一下服务器总名称,请自行设置 static_configs: - targets: ["172.19.130.185:9100"] labels: instance: "GoSkeleton" #标记一下目标服务器的作用,请自行设置 #启动promethus docker container run --name prometheus -d -p 172.19.130.185:9090:9090 -e TZ=Asia/Shanghai -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus # grafana 的启动 # 创建数据存储映射目录,主要用于存储grafana产生的数据,必须具备写权限 mkdir -p /opt/grafana-storage && chmod 777 -R /opt/grafana-storage #注意替换ip为自己的ip docker container run --name=grafana -d -p 172.19.130.185:3000:3000 -e TZ=Asia/Shanghai -v /opt/grafana-storage:/var/lib/grafana grafana/grafana ``` #### 防火墙允许 9090 、 3000端口 、 9100端口,示例 > A容器通过宿主机映射端口访问B容器,那么宿主机的映射端口就必须在防火墙打开,否则容器无法互通。 ```code # 以添加 9090 端口为例,3000 端口重复以下代码接口 firewall-cmd --zone=public --add-port=9090/tcp --permanent firewall-cmd --complete-reload #查看、确认已经允许的端口列表 firewall-cmd --list-ports ``` #### 通过chrome浏览器访问 ip:3000 登录,一般都能成功登陆,默认账号密码:admin/admin ##### 如果您登陆遇到了如下错误,那么请继续向下看: ![登录报错](https://www.ginskeleton.com/images/login_err.jpg) > 谷歌浏览器登录可能一次性会成功,搜狗浏览器登录是会报错的。 > 如果您的浏览器在登录时也报错,导致无法登陆成功,解决方案 ```code #进入grafana容器 docker exec -it grafana /bin/bash #进入脚本目录 cd /usr/share/grafana/bin #修改密码,然后通过新密码登录就不会在登录界面报错了 ./grafana-cli admin reset-admin-password 这里设置你的新密码 ``` #### 登录成功以后首先配置数据源 > step1: ![添加数据源step1](https://www.ginskeleton.com/images/add_source1.png) > step2: ![添加数据源step2](https://www.ginskeleton.com/images/add_source2.jpg) > step3: 点击 selected ![添加数据源step2](https://www.ginskeleton.com/images/add_source3.jpg) > step4: 点击 save&test 显示一切ok ![添加数据源step2](https://www.ginskeleton.com/images/add_source4.jpg) ![添加数据源step2](https://www.ginskeleton.com/images/grafana-prometheus.png) ![添加数据源step2](https://www.ginskeleton.com/images/add_source5.jpg) #### 导入监控服务器状态的模板 ![导入模板step2](https://www.ginskeleton.com/images/import1.jpg) > step2: 这里的8919 是监控系统运行状态的模板id > 相关模板地址: https://grafana.com/grafana/dashboards/8919 > 更多模板选择地址: https://grafana.com/grafana/dashboards ![导入模板step2](https://www.ginskeleton.com/images/import2.jpg) #### 最终效果: ![最后查看step1](https://www.ginskeleton.com/images/finnal1.jpg) ![最后查看step2](https://www.ginskeleton.com/images/finnal2.jpg) ![最后查看step3](https://www.ginskeleton.com/images/linux1.png) ![最后查看step3](https://www.ginskeleton.com/images/linux2.png)