本人Java开发工程师一枚,主攻后端,需要搭建一套Prometheus+Grafana的监控系统,采用企业微信告警通知。在网上各种查阅资料的同时,发现很多资料都大致相通且不完整,踩坑无数,经过多日钻研后,最终完成了整个搭建任务,特此记录下整个安装操作过程,希望能帮助各位。同时也请各位大神指导并提出意见,在此只能傻瓜式的记录下操作过程,如果有幸有哪位运维大神看到,还请指正不足之处,感激不尽[抱拳]
Promethus官网下载地址:https://prometheus.io/download/

Xshell连接服务器依次执行以下命令:
进入local目录下
cd /usr/local
上传下载好的文件包prometheus-2.36.2.linux-amd64.tar.gz (输入以下命令后回车)
rz
解压文件
tar -zxvf prometheus-2.36.2.linux-amd64.tar.gz
将解压后的文件夹重命名为prometheus
mv prometheus-2.36.2.linux-amd64 /usr/local/prometheus
进入prometheus目录下
cd prometheus/
编辑配置文件
vim prometheus.yml
追加以下配置 (注意格式、注意修改自己的ip)
- job_name: 'mysql'
static_configs:
- targets: ['自己的ip:9104']
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc → :wq! → 回车
校验修改后的配置文件格式是否正确
./promtool check config prometheus.yml
校验配置文件正常结果展示(非命令操作)
SUCCESS: prometheus.yml is valid prometheus config file syntax
封装Prometheus启动文件(输入以下命令后回车)
vim start.sh
输入以下内容
nohup ./prometheus --config.file=prometheus.yml &
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc → :wq! → 回车
给启动文件执行权限(输入以下命令后回车)
chmod +x start.sh
启动Prometheus
./start.sh
mysqld_exporter插件官网下载地址:https://prometheus.io/download/

cd /usr/local
上传下载好的文件包mysqld_exporter-0.12.1.linux-amd64.tar.gz(输入以下命令后回车)
rz
解压文件
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
将解压后的文件夹重命名为mysqld_exporter
mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
登录mysql的root账户(回车后输入密码,此操作需在已安装mysql的前提下执行)
mysql -uroot -p
设置mysql密码策略:密码长度为6
set global validate_password_length=6;
创建用户名为my的账户 密码为Abc@12 (此密码必须根据上边设置的策略长度为6,否则重新设置策略)
CREATE USER 'my'@'%' IDENTIFIED BY 'Abc@12' WITH MAX_USER_CONNECTIONS 3;
设置my账户的权限
GRANT ALL PRIVILEGES ON *.* TO 'my'@'%' IDENTIFIED BY 'Abc@12';
刷新权限
flush privileges;
退出mysql数据库编辑 (输入exit后点击回车)
exit → 回车
进入mysqld_exporter目录下
cd mysqld_exporter
创建配置文件my.cnf
vim my.cnf
输入以下内容 (注意修改自己的ip,host、port为mysql链接,user、password为mysql的账号密码 ) 复制粘贴命令为Shift+Insert
[client]
host=自己的ip
port=3306
user=root
password=root
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
进入/usr/lib/systemd/system/目录下
cd /usr/lib/systemd/system/
创建mysqld_exporter启动脚本
vi mysqld_exporter.service
输入以下内容
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io
Wants=network-online.target
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local /mysqld_exporter/my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
重新加载配置文件
systemctl daemon-reload
启动mysqld_exporter服务 (停止命令:systemctl stop mysqld_exporter.service)
systemctl start mysqld_exporter.service
查看mysqld_exporter服务状态
systemctl status mysqld_exporter.service
设置开机启动
systemctl enable mysqld_exporter.service
访问 IP:9104 地址 (下方图示)

点击 Metrics (下方图示为安装成功)

访问http://ip:9090/targets (如下图示mysql监控成功)

注:如没有任何展示可重启Prometheus(查看9090端口进程,kill干掉进程后,进入prometheus目录下执行./start.sh)
Grafana官网(版本8.3.3):https://grafana.com/grafana/download/8.3.3?pg=get&plcmt=selfmanaged-box1-cta1

cd /usr/local
执行下载命令,等待下载完成
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.3-1.x86_64.rpm
执行安装
sudo yum install grafana-enterprise-8.3.3-1.x86_64.rpm
进入/etc/grafana目录下
cd /etc/grafana
编辑grafana.ini配置文件
vim grafana.ini
修改以下内容
data目录位置配置:
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /opt/grafana/data
# Temporary files in `data` directory older than given duration will be removed
temp_data_lifetime = 240h
# Directory where grafana can store logs
logs = /opt/grafana/logs
database配置:
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.
# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = 自己的ip:3306
name = grafana
user = root
# If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
password = root
smpt配置:
[smtp]
;enabled = false
;host = smtphz.qiye.163.com
;user = 发送邮件账号
# If the password contains # or ; you have to wrap it with triple quotes. Ex"""#password;"""
;password = 发送邮件账号密码
;cert_file =
;key_file =
;skip_verify = false
;from_address = admin@grafana.localhost
;from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS
[emails]
;welcome_email_on_sign_up = false
;templates_pattern = emails/*.html, emails/*.txt
;content_types = text/html
启动Grafana服务
systemctl restart grafana-server.service
设置开机启动grafana-server
systemctl enable grafana-server.service
浏览器访问 IP:3000 默认用户密码都为admin


配置prometheus 数据源




导入mysql dashboards


Prometheus官网下载alertmanager:https://prometheus.io/download/

Xshell连接服务器依次执行以下命令:
进入local目录下
cd /usr/local
上传下载好的安装包alertmanager-0.24.0.linux-amd64.tar.gz(输入以下命令后回车)
rz
解压
tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz
将解压后的文件夹更名为alertmanager
mv alertmanager-0.24.0.linux-amd64 alertmanager
进入alertmanager目录下
cd alertmanager
创建grafana.yml配置文件
vim grafana.yml
输入以下内容 (获取corp_id、agent_id、api_secret、to_party信息方式:https://www.jianshu.com/p/5704622052de)
global:
resolve_timeout: 5m
templates:
- '/usr/local/alertmanager/wechat.tmpl' #微信模板,同级目录下wechat.tmpl
route:
group_by: ['alertname']
group_wait: 5s
#同一组内警报,等待group_interval时间后,再继续等待repeat_interval时间
group_interval: 1m
#当group_interval时间到后,再等待repeat_interval时间后,才进行报警
repeat_interval: 5m
receiver: 'wechat'
receivers:
- name: 'wechat'
wechat_configs:
- corp_id: 'xxxxxxxxxxxxx' #企业微信ID
agent_id: 'xxxxxxx' #应用ID
api_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #应用密码
to_party: 'xxxxxx' #部门id(部门所属人员均可接收到) 单个账号发送: to_user: 'xxxxx' #多人“,”逗号隔开
send_resolved: true
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
在/usr/local/alertmanager/创建上面配置文件中使用到的wechat.tmpl模板
vim wechat.tmpl
输入以下内容
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========异常告警==========
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========异常恢复==========
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description}};{{$alert.Annotations.summary}}
故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- if gt (len $alert.Labels.instance) 0 }}
实例信息: {{ $alert.Labels.instance }}
{{- end }}
{{- if gt (len $alert.Labels.namespace) 0 }}
命名空间: {{ $alert.Labels.namespace }}
{{- end }}
{{- if gt (len $alert.Labels.node) 0 }}
节点信息: {{ $alert.Labels.node }}
{{- end }}
{{- if gt (len $alert.Labels.pod) 0 }}
实例名称: {{ $alert.Labels.pod }}
{{- end }}
============END============
{{- end }}
{{- end }}
{{- end }}
{{- end }}
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
在当前目录下(/usr/local/alertmanager/)封装Grafana启动文件(输入以下命令后回车)
vim start.sh
输入以下内容
nohup ./alertmanager --config.file=grafana.yml --storage.path=data/ --log.level=debug &
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc → :wq! → 回车
给启动文件执行权限(输入以下命令后回车)
chmod +x start.sh
启动Grafana
./start.sh
访问 IP:9093/#/status 以下图示为成功

Prometheus官网下载node_exporter:https://prometheus.io/download/

Xshell连接服务器依次执行以下命令:
进入local目录下
cd /usr/local
上传下载好的安装包node_exporter-1.3.1.linux-amd64.tar.gz(输入以下命令后回车)
rz
解压
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz
将解压后的文件夹更名为node_exporter
mv node_exporter-1.3.1.linux-amd64.tar.gz node_exporter
进入node_exporter目录下
cd node_exporter
在当前目录下(/usr/local/node_exporter/)封装node_exporter启动文件(输入以下命令后回车)
vim start.sh
输入以下内容
nohup ./node_exporter & > node.log
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc → :wq! → 回车
给启动文件执行权限(输入以下命令后回车)
chmod +x start.sh
启动node_exporter
./start.sh
访问 IP:9100/metrics 以下图示为成功

Xshell连接服务器依次执行以下命令:
进入local目录下
cd /usr/local
创建jmx文件夹
mkdir jmx
进入jmx文件夹下
cd jmx
下载jmx_prometheus_javaagent-0.12.0.jar文件包
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar
创建配置文件(输入以下命令后回车)
vim config.yml
输入以下内容
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
- pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
name: os_$1_bytes
type: GAUGE
attrNameSnakeCase: true
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
创建java文件夹
mkdir java
进入java文件夹
cd java
上传要运行的java项目jar包(输入以下命令后回车,需先安装java环境jdk)
rz
在当前目录下( /usr/local/jmx/java/)封装java项目启动文件(输入以下命令后回车)
vim start.sh
输入以下内容(注意修改jar包名称, 注意3010为jmx_prometheus_javaagent端口号,非项目端口号)
nohup java -javaagent:/usr/local/jmx/jmx_prometheus_javaagent-0.12.0.jar=3010:/usr/local/jmx/config.yml -Xms100m -Xmx1024m -Dfile.encoding=utf-8 -jar /usr/local/jmx/java/上传的java项目包名称.jar
强制保存并退出 (点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc → :wq! → 回车
给启动文件执行权限(输入以下命令后回车)
chmod +x start.sh
启动项目
./start.sh
访问 IP::3010 以下图示为成功

进入到prometheus目录下
cd /usr/local/prometheus
编辑配置文件
vim prometheus.yml
追加以下内容(注意修改自己的ip)
- job_name: 'node'
static_configs:
- targets: ['自己的ip:9100']
- job_name: 'java'
static_configs:
- targets: ['自己的ip:3010']
强制保存并退出(点击键盘Esc按键 → 输入命令 :wq! → 点击回车)
Esc -> :wq! -> 回车
查看prometheus进程(回车后可查看进程的PID。lsof命令可能需要安装,百度查看下怎样安装很简单。)
lsof -i:9090
干掉进程(注意修改进程的PID)
kill 进程的PID
在当前目录下(/usr/local/prometheus)启动Prometheus
./start.sh
访问 IP:9090 以下图示为node_exporter和jmx配置成功(输入 JVM 和 node查看)










在企业微信【应用管理 → 引用】添加信任ip地址

查看运行的java进程(上边设置的端口是3010) 记录进程PID
lsof -i:3010
干掉进程
kill 进程PID
企业微信接收消息下方图示(可能会有延迟,几分钟或十几分钟不等)

进入jar目录下
cd /usr/local/jmx/java/
再次启动项目
./start.sh
企业微信收到以下信息

我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden