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模板(可以在官网找)