grafana和Alertmanager部署
grafana部署
[TOC]
1 官网地址:
https://grafana.com/grafana/download/7.0.0-beta1?platform=docker
1.1 下载地址
wget https://dl.grafana.com/oss/release/grafana-7.0.0-beta1.linux-amd64.tar.gz
tar -zxvf grafana-7.0.0-beta1.linux-amd64.tar.gz
2配置告警
yum install -y sendmail
vi /etc/grafana/grafana.ini (配置文件添加如下)
添加第一图表
[TOC]
1 进入新建数据源
2 添加promethues地址和端口/填写容器ip 备注:
我映射的nodeport地址不能使用这点注意一下。
2.1 查看k8s集群内地址
kubectl get svc -n kube-system
2.2 添加名字,选择类型是promethues IP
3 然后点击数据源即可查看添加
4 添加图表 我使用默认的id 为 315的图表
5 最后展示结果
Alertmanager钉钉告警
[TOC]
参考地址:
github地址
https://github.com/timonwong/prometheus-webhook-dingtalk/tree/v1.4.0
下载地址
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
写的好的博客地址
1 博客
http://www.linuxsre.cn/wiki/grafana/14
2grafana图表
https://grafana.com/grafana/dashboards/11190
Grafana介绍
[TOC]
1 介绍
Grafana是一个开源的度量分析与可视化套件。纯 Javascript 开发的前端工具,通过访问库(如InfluxDB),展示自定义报表、显示图表等。大多使用在时序数据的监控方面,如同Kibana类似。Grafana的UI更加灵活,有丰富的插件,功能强大。
Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。
1.1官方支持以下数据源:
- Graphite
- InfluxDB
- OpenTSDB
- Prometheus
- Elasticsearch
- CloudWatch
- KairosDB。
每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。下面我们来一起感受一下grafana。
2、Grafana基本概念
- Data Source
- Organization
- User
- Row
- Panel
- Query Editor
- Dashboard
2.1 Data Source
grafana支持多种时序数据源。每种数据源,都有各自的查询编辑器。
目前官方支持了如下几种数据源:
- Graphite
- InfluxDB
- OpenTSDB
- Prometheus
- Elasticsearch
- CloudWatch
在一个Dashboard中,可以结合多种数据源的数据。但是,一个Panel只能使用一个数据源(属于特定的组织&&)。
2 组织(Organization)
有些场景是一个grafana服务商与多个客户合作,客户之间是隔离的,所以grafana也就支持多组织。但在更多的场景下,grafana会被单独部署到某个客户环境中。
每个组织有一个或多个Data Source。Dashboard和组织也是多对一的关系。
3 在grafana中的组织下的每个用户,都可以使用属于这个组织的DataSoure和Dashboard。权限篇
3.1 User
一个用户可以属于一个或多个组织。在不通组织中可以被设置不同角色。
Grafana也支持多样的认证方式。比如集成database,或来自外部的SQL server,或是一个LDAP server。
详见User Auth。
3.2 Row
在一个Dashboard,“行“是用来组合各个Panel的。一行有12个单元,可以将panel设置成不同的单位宽度。更不错的是,grafana在所有分辨率的屏幕下,都能适应的很好。
使用Repeating Row Function,可以通过选择下拉菜单的参数,动态控制创建和移除行(这些行可能有Panel,还没尝试&&)
点击Row title,可以折叠行。如果在保存时,一个Dashboard的某些行被折叠,则折叠的状态也会被保存。浏览时如果没有再次展开它,则里面的数据也不会预加载。
3.3 Panel
在grafana中,Panel是基础呈现块。每个Panel都提供了查询编辑器Query Editor,辅助我们从DataSource提取所展示的信息。
每种Panel都有多样的配置和展现方式,它可以在Dashboard上拖拽和重绘大小。
官方提供的Panel有如下:
- Graph
- Singlestat
- Dashlist
- Table
- Text
Graph可以提供折线图、柱状图等能力,可以通过Plugin添加其它图表。Singlestat如同其名,是用来展示单个字段的状态。Dashlist和Text是特殊的panel,它不连接任何Data Source。
使用Dashborad变量(下拉菜单),可以动态的配置panel。使用Repeating Panel function可以动态的创建和移除panel。panel的时间一般采用Dashborad上的time picker,但也可以自定义时间。
panel很容易被分享,可以导出这个panel的json文档。
3.4 Query Editor
如上介绍的,查询编辑器也是数据源间不同的。编辑器可以引用Dashboard的变量,来达到动态控制panel的目的。QE也可以添加多次Query,来获取多个series。每次Query的结果,可以通过输入#xxx给下一次引用,进行更高级的查询。
3.5 Dashboard
最终,所有的panel和row汇总到了dashboard中。右上角的time picker可以控制panel的时间。dashboard能被方便的共享。可以使用Snapshot的特性,将当前的所有视图数据导出到静态的JSON文档中。dashboard也可以被打标签。
3.6 Grafana特性
- Panel
- Dashboard Features
- Data Source
- Alerting
- Keyboard Shortcuts
监控nginx图表
[TOC]
1 修改nginx.conf日志输出配置
vim nginx.conf
log_format main
'{"@timestamp":"$time_iso8601",'
'"host":"$hostname",'
'"server_ip":"$server_addr",'
'"client_ip":"$remote_addr",'
'"xff":"$http_x_forwarded_for",'
'"domain":"$host",'
'"url":"$uri",'
'"referer":"$http_referer",'
'"args":"$args",'
'"upstreamtime":"$upstream_response_time",'
'"responsetime":"$request_time",'
'"request_method":"$request_method",'
'"status":"$status",'
'"size":"$body_bytes_sent",'
'"request_body":"$request_body",'
'"request_length":"$request_length",'
'"protocol":"$server_protocol",'
'"upstreamhost":"$upstream_addr",'
'"file_dir":"$request_filename",'
'"http_user_agent":"$http_user_agent"'
'}';
验证并重启nginx服务
nginx -t
nginx -s reload
2 部署es
部署文档:https://www.wangairui.com/docs/elk/elk-1dde0krtpi3gk
[TOC]
说明:
filebeat、logstash、es、kibana都是用7.15版本
grafana6.2.2版本
1、nginx配置(主配置文件添加后,reload)
#说明:主配置文件添加后需要注释掉其他配置文件的日志,不然会出现日志不输出问题
log_format log_json '{"@timestamp":"$time_iso8601",'
'"host":"$hostname",'
'"server_ip":"$server_addr",'
'"client_ip":"$remote_addr",'
'"xff":"$http_x_forwarded_for",'
'"domain":"$host",'
'"url":"$uri",'
'"referer":"$http_referer",'
'"args":"$args",'
'"upstreamtime":"$upstream_response_time",'
'"responsetime":"$request_time",'
'"request_method":"$request_method",'
'"status":"$status",'
'"size":"$body_bytes_sent",'
'"request_body":"$request_body",'
'"request_length":"$request_length",'
'"protocol":"$server_protocol",'
'"upstreamhost":"$upstream_addr",'
'"file_dir":"$request_filename",'
'"http_user_agent":"$http_user_agent"}';
access_log /data/nginx-1.6.3/log/access.log log_json;
2、安装elk
elk7.15二进制包安装 #直接搜索,有文档
3、配置文件ELK文件
3.1、filebeat配置文件(配置后重启)
filebeat.inputs: # inputs为复数,表名type可以有多个
- type: log # 输入类型
access:
enabled: true # 启用这个type配置
# 日志是json开启这个
paths:
- /data/nginx-1.6.3/log/access.log # 监控nginx 的access日志
json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true
tags: ["nginx-log"]
setup.ilm.enabled: false
output.logstash:
hosts: ["172.22.6.102:5044"]
close_inactive: 1m
close_timeout: 3h
clean_inactive: 72h
ignore_older: 70h
max_procs: 1 # 限制一个CPU核心,避免过多抢占业务资源
queue.mem.events: 256 # 存储于内存队列的事件数,排队发送 (默认4096)
queue.mem.flush.min_events: 128 # 小于 queue.mem.events ,增加此值可提高吞吐量 (默认值2048)
3.2、logstash配置文件(配置后重启)
/data/GeoIP/GeoLite2-City.mmdb #需要放到对应的目录下面
网盘地址:链接: https://pan.baidu.com/s/1KJMzX0Yq4T9bXlXJmJaccg 提取码: u6dh
github地址:https://github.com/wp-statistics/GeoLite2-City
/data/logstash/config/conf.d/nginx.conf #配置文件
input {
beats {
port => 5044
}
}
filter {
# 因为Nginx前端有负载均衡,$remote_addr 字段不是用户真实ip地址
# 本例获取 $http_x_forwarded_for 字段,$http_x_forwarded_for 字段第一个ip地址就是用户真实ip地址
# 再nginx字段基础上添加 real_remote_addr 字段,用于存储用户真实ip地址
# if ([fields][source] =~ "nginx-access") {
if "nginx-log-6.11" in [tags] {
if "," in [xff] {
mutate {
split => ["xff", ","]
add_field => { "real_remote_addr" => "%{[xff][0]}" }
}
} else if ([xff] == "-") {
mutate {
add_field => { "real_remote_addr" => "-" }
}
} else {
mutate {
add_field => { "real_remote_addr" => "%{xff}" }
}
}
# if "nginx-log" in [tags] {
geoip {
target => "geoip"
source => "real_remote_addr"
# source => "client_ip"
database => "/data/GeoIP/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
# 去掉显示 geoip 显示的多余信息
#remove_field => ["[geoip][latitude]", "[geoip][longitude]", "[geoip][country_code]", "[geoip][country_code2]", "[geoip][country_code3]", "[geoip][timezone]", "[geoip][continent_code]", "[geoip][region_code]"]
remove_field => ["[geoip][latitude]", "[geoip][longitude]", "[geoip][country_code]", "[geoip][country_code2]", "[geoip][country_code3]", "[geoip][timezone]", "[geoip][continent_code]", "[geoip][region_code]"]
}
mutate {
convert => [ "size", "integer" ]
convert => [ "status", "integer" ]
convert => [ "responsetime", "float" ]
convert => [ "upstreamtime", "float" ]
convert => [ "[geoip][coordinates]", "float" ]
# gsub => ["message", "\\x", "\\\x"]
# 过滤 filebeat 没用的字段,这里过滤的字段要考虑好输出到es的,否则过滤了就没法做判断
remove_field => [ "ecs","agent","host","cloud","@version","input","logs_type" ]
}
# 根据http_user_agent来自动处理区分用户客户端系统与版本
useragent {
source => "http_user_agent"
target => "ua"
# 过滤useragent没用的字段
remove_field => [ "[ua][minor]","[ua][major]","[ua][build]","[ua][patch]","[ua][os_minor]","[ua][os_major]" ]
}
}
}
output { # 输出组件
# 调试模式
if "nginx-log-6.11" in [tags] {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => "172.22.6.102:9200"
user => "elastic"
manage_template => true
password => "password"
index => "logstash-nginx-%{+YYYY.MM.dd}"
}
}
}
3.3、kibana创建索引 (当然这不用创建,默认有)
4、安装grafana
wget https://dl.grafana.com/oss/release/grafana-6.6.2-1.x86_64.rpm
sudo yum install grafana-6.6.2-1.x86_64.rpm
4.1 安装所需要的插件
网盘地址:链接: https://pan.baidu.com/s/1KJMzX0Yq4T9bXlXJmJaccg 提取码: u6dh
tar xf grafana-piechart-worldmap.tar.gz -C /var/lib/grafana/plugins
service grafana-server restart #加载插件
4.2 添加数据源、导入模板
添加数据源
导入模板
5、注意事项
1、测试出图需要多入点数据库,不然有的图显示不出来
2、尽量使用线上环境数据,以便于出图
1、安装grafana
Grafana的官网:http://docs.grafana.org/installation/rpm/
1.安装RPM包
#wget https://dl.grafana.com/oss/release/grafana-8.0.0-1.x86_64.rpm
2.安装编译环境
#yum install -y initscripts fontconfig urw-fonts
3.解压安装grafana
#rpm -ivh grafana-8.0.0-1.x86_64.rpm
4.启动并设置为开机自启
#systemctl start grafana-server.service && systemctl enable grafana-server.service
5.Web端访问3000端口
http://ip:3000
Grafana默认用户名:admin,密码:admin
2、安装zabbix插件
#方法一:(下载最新版)
grafana-cli plugins install alexanderzobnin-zabbix-app
#方法二:(指定版本下载)
wget https://storage.googleapis.com/plugins-community/alexanderzobnin-zabbix-app/release/4.2.5/alexanderzobnin-zabbix-app-4.2.5.zip
#解压后放入/var/lib/grafana/plugins下
unzip alexanderzobnin-zabbix-app-4.2.5.zip
mv alexanderzobnin-zabbix-app /var/lib/grafana/plugins/
#加载插件
service grafana-server restart
3、配置
3.1 添加zabbix插件
4、添加dashboard模板(可以在官网找)
- 感谢你赐予我前进的力量