to be delete

一、grafana版本升级

1.1  还是先跟着官网简单走一波

      建议经常升级Grafana,以获取最新的修补程序和增强功能。 为了实现这一点,Grafana升级向后兼容,并且升级过程简单快捷。升级通常是安全的(在许多次要版本和一个主要版本之间),并且仪表板和图形看起来相同。 在某些情况下,可能会有一些小的重大更改,如发行说明和变更日志中所述(https://github.com/grafana/grafana/blob/master/CHANGELOG.md)。

更新插件:

     升级后,强烈建议更新所有插件,因为新版本的Grafana会使旧插件停止正常工作。可以使用更新所有插件:grafana-cli plugins update-all

数据库备份:

      在升级之前,最好备份你的Grafana数据库。 这将确保你始终可以回滚到以前的版本。 在启动过程中,Grafana将自动迁移数据库架构(如果有更改或新表)。 有时,如果你以后要降级,可能会导致问题。

sqlite:

      如果使用sqlite,则只需备份grafana.db文件。它通常位于Unix系统上的/var/lib/grafana/grafana.db中。 如果不确定使用哪个数据库以及将其存储在哪里,请检查grafana配置文件。 如果使用二进制tar/zip将grafana安装到自定义位置,则通常在/data中。

mysql:

Bash

backup:
> mysqldump -u root -p[root_password] [grafana] > grafana_backup.sql
restore:
> mysql -u root -p grafana < grafana_backup.sql

postgres:

Bash

backup:
> pg_dump grafana > grafana_backup
restore:
> psql grafana < grafana_backup

升级:

      升级到v6.0。如果你有带有script tags的文本面板,则由于新设置(默认情况下不允许未经处理的HTML),它们将不再起作用。

从二进制.tar文件升级:

     如果下载了二进制.tar.gz软件包,则只需下载并解压缩新软件包并覆盖所有现有文件即可。但是,这可能会覆盖你的配置更改。建议你将自定义配置更改保存在名为/conf/custom.ini的文件中。 这使你可以升级Grafana,而不必担心丢失配置更改。

Centos / RHEL:

      如果通过下载RPM软件包安装了Grafana,则只需遵循相同的安装指南并执行相同的yum install或rpm -i命令,但使用新软件包即可。它将升级你的Grafana安装包。如果你使用了grafana的YUM存储库:sudo yum update grafana

Docker:

     这只是一个示例,详细信息取决于你配置grafana容器的方式。

Bash

docker pull grafana
docker stop my-grafana-container
docker rm my-grafana-container
docker run --name=my-grafana-container --restart=always -v /var/lib/grafana:/var/lib/grafana

1.2  实践升级一下

#说是实践升级一下,其实咱们已经看了上面的介绍升级还是很简单的。我是编译安装的,我就按照编译安装的升级方式来了。

image.png

#从上图可以看到我都是软连接的方式,所以我升级就是下载软件包解压然后拷贝过来相关的目录然后重启下服务就行。

#首先是数据库的保存上面有,选择了什么类型的数据库就保存一下以防万一。

# tar zxf grafana-6.5.2.linux-amd64.tar.gz

#kill -9 `ps -aux|grep grafana.ini|grep -v grep|awk {'print $2'}`

#ln -snf grafana-6.5.2 grafana

#cp -f  grafana-6.3.5/conf/grafana.ini  grafana/conf/

# cp grafana-6.3.5/conf/ldap.toml  grafana/conf/   #如果做了ldap的认证还要做这步操作

#cp -rf grafana-6.3.5/data grafana/

#/application/grafana/bin/grafana-cli plugins update-all

#cd /application/grafana/ && ./bin/grafana-server -config ./conf/grafana.ini &

#再打开grafana就可以看到升级成最新版了,这个就不截图了。

博文来自:www.51niux.com

二、Grafana高可用

2.1 还是先跟着官网翻译一波

       设置Grafana以获得高可用性非常简单。 只需要一个共享数据库来存储仪表板,用户和其他持久数据。 因此,默认的嵌入式SQLite数据库将无法工作,将不得不切换到MySQL或Postgres。

to be delete_第1张图片

Alerting:

当前,警报支持有限形式的高可用性。 从v4.2.0开始,运行多个服务器时将删除警报通知。这意味着所有警报都在每台服务器上执行,但是警报通知每个警报仅发送一次。 Grafana不支持服务器之间的负载分配。

User sessions:

        在Grafana 6.2之后,无需配置会话存储,因为默认情况下将使用该数据库。 如果要从数据库中卸载登录会话数据,则可以配置remote_cache。

        要考虑的第二件事是如何处理用户会话以及如何在Grafana前面配置负载均衡器。 Grafana支持两种存储会话数据的方式:本地存储在磁盘上或数据库/缓存服务器中。 如果要将会话存储在磁盘上,则可以在负载均衡器中使用Sticky会话。 如果希望将会话数据存储在数据库/缓存服务器中,则可以在负载均衡器中使用任何无状态路由策略(轮循或最少连接)。

Sticky sessions:

       使用粘性会话,一个用户的所有流量将始终发送到同一服务器。 这意味着与会话相关的数据可以存储在磁盘上,而不是存储在共享数据库上。 这是Grafana的默认行为,如果只希望多个服务器进行故障转移,则这是一个很好的解决方案,因为它需要的工作量最少。

Stateless sessions:

      还可以选择将会话数据存储在Redis/Memcache/Postgres/MySQL中,这意味着负载均衡器可以将用户发送到任何Grafana服务器,而无需登录每个服务器。 这需要操作员多做一些工作,但使你能够删除/添加grafana服务器而不会影响用户体验。 如果你使用MySQL/Postgres进行会话存储,则首先需要一个表来存储会话数据。

     对于Grafana本身,将会话数据存储在磁盘还是数据库/redis/memcache上并不重要。但是建议使用数据库/redis /memcache,因为它可以更轻松地管理grafana服务器。

2.2 实践配置一下

首先要配置使用mysql数据库:

Bash

[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 property.

# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = 192.168.1.101
name = grafana
user = grafana
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = grafana

#上面的配置很好理解哈,选择数据库类型为mysql类型,选择数据库的地址和用户名和密码,然后启动grafana就可以了,相关表会自动创建:

Bash

>use grafana;
>show tables;   #可以看到下面生成了很多表  
alert    
alert_notification    
alert_notification_state    
alert_rule_tag    
annotation    
annotation_tag    
api_key    
cache_data    
dashboard    
dashboard_acl    
dashboard_provisioning    
dashboard_snapshot    
dashboard_tag    
dashboard_version    
data_source    
login_attempt    
migration_log    
org    
org_user    
playlist    
playlist_item    
plugin_setting    
preferences    
quota    
server_lock    
session    
star    
tag    
team    
team_member    
temp_user    
test_data    
user    
user_auth    
user_auth_token

然后创建一个session表(如果没有这个session表的情况下,但是现在新版的已经有这个session表了):

Bash

>use `grafana`;
>CREATE TABLE `session` (
    `key`       CHAR(16) NOT NULL,
    `data`      BLOB,
    `expiry`    INT(11) UNSIGNED NOT NULL,
    PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

# vim conf/grafana.ini

Bash

[session]
provider = mysql
provider_config = grafana:grafana@tcp(192.168.1.101:3306)/grafana
cookie_name = grafana_sess
cookie_secure = false
session_life_time = 86400

#特别注意6.2版本中已经删除了session选项,改为了remote_cache选项,如下面的配置:

Bash

#################################### Cache server #############################
[remote_cache]
# Either "redis", "memcached" or "database" default is "database"
type = database

# cache connectionstring options
# database: will use Grafana primary database.
# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'.
# memcache: 127.0.0.1:11211
connstr = mysql账号:mysql密码@tcp(mysql地址:3306)/grafana

#然后重启grafana就能共享会话了。

#这里要记录一下我其实并没实现共享会话的效果,我看着官网配置很简单,但是怎么也实现不了会话共享的效果,我用其他方式实现了会话共享,如果成功的大哥们可以指正下我哪里错了.......

2.3 迁移导出sqlite3数据到mysql

#假如你一开始没有考虑高可用方案后面才用起来的,可能一开始用的是sqlite3数据库,可能你已经搞了很多dashboard有很多用户之类的。那么这时候你说让大家才重新登陆一下或者新环境照着旧环境再来一遍就显得有点不合适了,这时候就需要数据库迁移了。而sqlite3跟mysql还是有些区别的,我们需要做一些调整。

#我这里还是有点偷懒的成分的,首先我是把所有的建表语句什么的全不要我只要insert语句,先在新环境用grafana和mysql创建完完整的数据表。

在旧环境导出sql文件:

# sqlite3 grafana.db

Bash

sqlite> .output /tmp/grafana_dump.sql
sqlite> .dump
sqlite> .exit

#修改导出的sql文件:

#首先第一步就是把INSERT语句单独的过滤出来。

#然后呢就是把无用的往表里面INSERT初始信息的语句删除掉,因为我们mysql表里面已经有这些数据了。

#然后呢就要执行类似于:sed -i 's#"dashboard"#`dashboard`#' grafana_dump.sql   #将""变成``这样导入mysql的时候才不会报错。

#再然后呢就是进行数据库导入了,然后根据导入的报错信息再具体排查吧。

# cat grafana_dump.sql|grep -o "INSERT INTO.* VALUES"|sort -nr|uniq   #这是我导入mysql的文件,多余INSERT语句都没要,就留了这些

Bash

INSERT INTO `user` VALUES
INSERT INTO `user_auth` VALUES
INSERT INTO `temp_user` VALUES
INSERT INTO `team` VALUES
INSERT INTO `team_member` VALUES
INSERT INTO `tag` VALUES
INSERT INTO `star` VALUES
INSERT INTO `preferences` VALUES
INSERT INTO `org_user` VALUES
INSERT INTO `data_source` VALUES
INSERT INTO `dashboard_version` VALUES
INSERT INTO `dashboard` VALUES
INSERT INTO `dashboard_tag` VALUES

#另外user表的插入admin的语句和org表的插入Main Org表的语句肯定是要去掉的,可以在导入报错中逐步的删除点mysql表中已存在的数据。

博文来自:www.51niux.com

三、Grafana开启LDAP认证

3.1 grafana开启LDAP认证

#当一个公司系统多了就会做集中认证,所以我们grafana也得是集中认证的一部分。

# vim grafana.ini   #下面的意思很简单就不多做解释了

Bash

#################################### Auth LDAP ###########################
[auth.ldap]
enabled = true
config_file = conf/ldap.toml
allow_sign_up = true

# vim ldap.toml   #上面已经引用了ldap.toml并开启了ldap认证,所以这里就要配置此文件了

Bash

[[servers]]
# LDAP服务器主机(指定多个主机,空格分隔)
host = "ldap.51niux.com"
#如果use_ssl = true,则默认端口为389或636
port = 389
#如果ldap服务器支持TLS,则设置为true
use_ssl = false
#如果使用STARTTLS模式连接ldap服务器,则设置为true(以不安全的方式创建连接,然后升级为使用TLS的安全连接)
start_tls = false
#如果要跳过ssl证书验证,请设置为true
ssl_skip_verify = false
# set to the path to your root CA certificate or leave unset to use system defaults
# root_ca_cert = "/path/to/certificate.crt"
# Authentication against LDAP servers requiring client certificates
# client_cert = "/path/to/client.crt"
# client_key = "/path/to/client.key"

#搜索用户绑定dn
bind_dn = "cn=ro,dc=51niux,dc=com"
#搜索用户绑定密码,如果密码包含#或; 必须用三引号引起来。 例如"""#password;"""
bind_password = '51niux.com'

#用户搜索过滤器,例如"(cn =%s)"或“”(sAMAccountName =%s)" "或"(uid =%s)"
search_filter = "(cn=%s)"

#用户搜索的范围
search_base_dns = ["ou=users,dc=51niux,dc=com"]

#好了,配置好ldap认证之后重启服务就好了。当然你也可能遇到一些问题,可以先不要放到后台启动呢,将服务放到前台启动进行查看,基本按照我这么配就OK了,当然也要检查你跟ldap服务是否能够连上,如果连上了还不行可以直接用ldap命令试试。

3.2 ldap用户权限保持

#开启了ldap之后你可能会发现一个问题,比如给某个ldap分配了admin角色或者edit角色,但是退出再登陆或者重新登录就角色就消失了。那比如我想给我运维团队的小伙伴admin角色给其他的人一些edit角色,只能每次重新授权或者共用一个admin账户或者创建本地用户吗?显然有更好的办法:

# vim ldap.toml

Bash

## Map ldap groups to grafana org roles
#[[servers.group_mappings]]
#group_dn = "cn=admins,dc=grafana,dc=org"
#org_role = "Admin"
## To make user an instance admin  (Grafana Admin) uncomment line below
## grafana_admin = true
## The Grafana organization database id, optional, if left out the default org (id 1) will be used
## org_id = 1
#
#[[servers.group_mappings]]
#group_dn = "cn=users,dc=grafana,dc=org"
#org_role = "Editor"
#
#[[servers.group_mappings]]
## If you want to match all (or no ldap groups) then you can use wildcard
#group_dn = "*"
#org_role = "Viewer"

#如上面所示,我们将关于ldap的映射全注释掉,不开启此功能,这样每次用户登陆的时候就不会映射对应的角色,那么授权也就不会变来变去。

四、Grafana开启匿名登录

#当然实际生产过程中,可能需要将grafana的监控图嵌套到其他的平台里面去,这时候可以考虑开启来宾用户访问,当然也叫匿名登录。

# vim  grafana.ini

Bash

#################################### Anonymous Auth ######################
[auth.anonymous]
#启用匿名访问,默认是false的
enabled = true

#指定应用于未经身份验证的用户的组织名称
org_name = Main Org.

#指定未经身份验证的用户的角色
org_role = Viewer

to be delete_第2张图片

#好再次重启服务,这样当直接访问grafana的时候就不要登录,我们默认就是Views角色就可以看到允许Views角色可以看到的dashboard了。

#好的,这样就带来了两个问题,第一个问题,那么是不是谁都可以来把grafana嵌套到它的程序页面中,第二个问题因为grafana随着持续的深入所要展示的图标越来越多,不同的人应该看到不同的图,或者说人家一登录你的页面你有100张图而人家实际就关心一张图,所以又不能摊大饼的去展示。

博文来自:www.51niux.com

4.1 如何嵌套grafana界面

#这里就一个简单的demo了

#vim test.html

Bash




    
    Title



    

#这就是嵌套的简单demo了,这样当访问你的页面就可以把grafana某个pod监控的页面嵌套到你的页面了,当然你也可以在你的页面进行其他指标的选择。

4.2 如何防止别人嵌套

#这手段就很多了,可以基于IP层面做限制,只允许指定的IP可以访问你的80端口,但是基于IP也不太好,因为办公网之类的面也很大的。

#前面我们不是用nginx做了反向代理了吗?可以把nginx用起来。

# vim /application/nginx/conf/nginx.conf

Bash

    #表示该页面可以在相同域名页面的 frame 中展示。
    add_header X-Frame-Options SAMEORIGIN;

    server {

#这样你就可以结合nginx本身的deny外加这个响应头过滤来进行防护。

X-Frame-Options 响应头:X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 ,