Grafana高可用-LDAP

在这里插入图片描述

一. grafana高可用

1. 迁移之前的 grafana

sqlitedump.sh

#!/bin/bash
DB=$1
TABLES=$(sqlite3 $DB .tables | sed -r 's/(\S+)\s+(\S)/\1\n\2/g' | grep -v migration_log)
for t in $TABLES; doecho "TRUNCATE TABLE $t;"
done
for t in $TABLES; doecho -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB

将grafana.db 转为mysql的sql文件

  • 找到 grafana 的 grafana.db,得到sql文件,source到mysql上即可
sh sqlitedump grafana.db >grafana.sql

2. 部署

  • 将数据存储到 mysql

1) mysql

  • grafna会自己初始化库,前提是需要创建出来
apiVersion: apps/v1
kind: PersistentVolumeClaim
metadata:name: mysqlnamespace: monitor
spec:storageClassName: monitor-nfs-storageaccessModes:- ReadWriteManyresources:requests:storage: 10Gi
#apiVersion: v1
#kind: ConfigMap
#metadata:
#  name: my.cnf
#  namespace: monitor
#data:
#  my.cnf: |
#    [mysqld]
#    port=3306
#---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mysqlname: mysqlnamespace: monitor
spec:selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:5.7name: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: Man10f&3^H_98est$#valueFrom:#  secretKeyRef:#    name: mysql-root-password#    key: passwordports:- containerPort: 3306volumeMounts:- name: mysqlvolumemountPath: /var/lib/mysql#  - name: mysql-conf#    mountPath: /etc/mysql/my.cnf#    subPath: my.cnfvolumes:- name: mysqlvolumepersistentVolumeClaim:claimName: mysql#- name: mysql-conf#  configMap:#    name: my.cnf
---
apiVersion: v1
kind: Service
metadata:labels:app: mysqlname: mysqlnamespace: monitor
spec:selector:app: mysqltype: ClusterIPports:- port: 3306protocol: TCPtargetPort: 3306
mysql -h mysql -p
create database grafana;
use grafana;
CREATE USER 'grafana'@'%' IDENTIFIED BY 'Man10f&3^H_98est$';
GRANT all on *.* TO 'grafana'@'%';
# 导入数据
source /grafana.sql

2). grafna

  • 配置文件需要改为如下的,其他的配置自行添加上去,这里只是mysql的配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: grafananamespace: monitor#annotations:#volume.beta.kubernetes.io/storage-class: "nfs"
spec:storageClassName: monitor-nfs-storageaccessModes:- ReadWriteManyresources:requests:storage: 10Gi
kind: ConfigMap
apiVersion: v1
metadata:name: grafana-confignamespace: monitor
data:grafana.ini: | [database]type = mysqlhost = mysql.prometheus.svc.cluster.local:3306name = grafanauser = grafanapassword = Man10f&3^H_98est$[auth.ldap]enabled = trueconfig_file = /etc/grafana/ldap.toml[log]level = debug---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: grafananamespace: monitor
spec:rules:- host: grafana-panel.yee.comhttp:paths:- path: /pathType: Prefixbackend:service: name: grafanaport:number: 3000tls:- hosts:- grafana-panel.yee.comsecretName: 2022-yee.com
---
apiVersion: apps/v1
kind: Deployment
metadata:name: grafananamespace: monitor
spec:replicas: 2selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:securityContext:runAsUser: 0containers:- name: grafanaimage: harbor.yee.com:8443/library/grafana:8.5.0imagePullPolicy: IfNotPresentports:- containerPort: 3000name: grafanaenv:- name: GF_SECURITY_ADMIN_USERvalue: admin- name: GF_SECURITY_ADMIN_PASSWORDvalue: Manifest%0304readinessProbe:failureThreshold: 10httpGet:path: /api/healthport: 3000scheme: HTTPinitialDelaySeconds: 60periodSeconds: 10successThreshold: 1timeoutSeconds: 30livenessProbe:failureThreshold: 3httpGet:path: /api/healthport: 3000scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1resources:limits:cpu: 2memory: 2Girequests:cpu: 150mmemory: 512MivolumeMounts:- mountPath: /var/lib/grafananame: storage- mountPath: /etc/grafana/grafana.inisubPath: grafana.ininame: configvolumes:- name: storagepersistentVolumeClaim:claimName: grafana- name: configconfigMap:name: grafana-config---
apiVersion: v1
kind: Service
metadata:name: grafananamespace: monitor
spec:type: ClusterIPports:- port: 3000selector:app: grafana

3. LDAP

  • grafana 使用加域,使用域账号登录,需要配置LDAP,LDAP是一种通讯协议,如同HTTP是一种协议一样的,
  • 域控的dn, 在 LDAP 目录中:
    • DC (Domain Component)
    • CN (Common Name)
    • OU (Organizational Unit)
  • An LDAP 目录类似于文件系统目录. 下列目录: DC=redmond,DC=wa,DC=microsoft,DC=com,如果我们类比文件系统的话,可被看作如下文件路径: Com\Microsoft\Wa\Redmond
  • 例如:cn=test 可能代表一个用户名, ou=developer 代表一个active directory中的 组织单位。这句话的含义可能就是说明test这个对象处在domainname. com域的developer组织单元中
kind: ConfigMap
apiVersion: v1
metadata:name: grafana-confignamespace: prometheus
data:grafana.ini: | [database]type = mysqlhost = mysql.prometheus.svc.cluster.local:3306name = grafanauser = grafanapassword = Man10f&3^H_98est$[auth.ldap]enabled = trueconfig_file = /etc/grafana/ldap.toml[log]level = info
---
kind: ConfigMap
apiVersion: v1
metadata:name: grafana-ldapnamespace: prometheus
data:ldap.toml: |# To troubleshoot and get more log info enable ldap debug logging in grafana.ini# [log]# filters = ldap:debug[[servers]]# Ldap server host (specify multiple hosts space separated)host = "192.168.1.250"# Default port is 389 or 636 if use_ssl = trueport = 389# Set to true if LDAP server should use an encrypted TLS connection (either with STARTTLS or LDAPS)use_ssl = false# If set to true, use LDAP with STARTTLS instead of LDAPSstart_tls = false# set to true if you want to skip ssl cert validationssl_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"# Search user bind dn#bind_dn = "CN=xingguang,OU=运维组,OU=研发中心,OU=ooo,DC=SDRAD,DC=COM"bind_dn = "ooo"		# 根据自己的写# Search user bind password# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""bind_password = 'dfs@52%2(89!ykWc'# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"#search_filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl=514))(name=*))"search_filter = "(sAMAccountName=%s)"#search_filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl=514))(sAMAccountName={login}))"# An array of base dns to search throughsearch_base_dns = ["OU=ooo,DC=sdrad,DC=com"]## For Posix or LDAP setups that does not support member_of attribute you can define the below settings## Please check grafana LDAP docs for examples# group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"# group_search_base_dns = ["ou=groups,dc=grafana,dc=org"]# group_search_filter_user_attribute = "uid"# Specify names of the ldap attributes your ldap uses[servers.attributes]name = "displayName"#surname = "sn"#username = "username"username = "sAMAccountName"#member_of = "memberOf"email =  "mail"# Map ldap groups to grafana org roles[[servers.group_mappings]]group_dn = "CN=xxx,OU=运维组,OU=研发中心,OU=ooo,DC=SDRAD,DC=COM"org_role = "Admin"# To make user an instance admin  (Grafana Admin) uncomment line belowgrafana_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=xxx,OU=运维组,OU=研发中心,OU=ooo,DC=SDRAD,DC=COM"org_role = "Editor"#org_id = 2#[[servers.group_mappings]]## If you want to match all (or no ldap groups) then you can use wildcardgroup_dn = "*"org_role = "Viewer"#org_id = 3
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: grafananamespace: prometheus
spec:rules:- host: grafana-test.yee.net.cnhttp:paths:- path: /pathType: Prefixbackend:service: name: grafanaport:number: 3000tls:- hosts:- grafana-test.yee.net.cnsecretName: yee.net.cn
---
apiVersion: apps/v1
kind: Deployment
metadata:name: grafananamespace: prometheus
spec:replicas: 2selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:nodeSelector:ldap: "true"securityContext:runAsUser: 0containers:- name: grafanaimage: harbor.yee.net.cn/library/grafana:8.5.0imagePullPolicy: IfNotPresentports:- containerPort: 3000name: grafanaenv:- name: GF_SECURITY_ADMIN_USERvalue: admin- name: GF_SECURITY_ADMIN_PASSWORDvalue: Manifest%0304OURreadinessProbe:failureThreshold: 10httpGet:path: /api/healthport: 3000scheme: HTTPinitialDelaySeconds: 60periodSeconds: 10successThreshold: 1timeoutSeconds: 30livenessProbe:failureThreshold: 3httpGet:path: /api/healthport: 3000scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1resources:limits:cpu: 2memory: 2Girequests:cpu: 150mmemory: 512MivolumeMounts:- mountPath: /var/lib/grafananame: storage- mountPath: /etc/grafana/grafana.inisubPath: grafana.ininame: config- mountPath: /etc/grafana/ldap.tomlsubPath: ldap.tomlname: ldapvolumes:- name: storagepersistentVolumeClaim:claimName: grafana- name: configconfigMap:name: grafana-config- name: ldapconfigMap:name: grafana-ldap---
apiVersion: v1
kind: Service
metadata:name: grafananamespace: prometheus
spec:type: ClusterIPports:- port: 3000selector:app: grafana

同样 Deployment 需要加一些配置

        volumeMounts:- mountPath: /var/lib/grafananame: storage- mountPath: /etc/grafana/grafana.inisubPath: grafana.ininame: config- mountPath: /etc/grafana/ldap.tomlsubPath: ldap.tomlname: ldapvolumes:- name: storagepersistentVolumeClaim:claimName: grafana- name: configconfigMap:name: grafana-config- name: ldapconfigMap:name: grafana-ldap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/224513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十五章、Thymeleaf Thymeleaf是一种现代化的服务器端Java模板引擎,专门用于Web和独立环境。Thymeleaf在有网络和无网络的环境下皆可运行,即可以让美工在浏览器查看页面的静态效果&am…

less 查看文本时,提示may be a binary file.See it anyway?

解决办法 首先使用echo $LESSCHARSET查看less的编码 看情况设置less的编码格式(我的服务器上使用utf-8查看中文) 还要特别注意一下,Linux中存在的文本文件的编码一定要是utf - 8;(这一步很关键) 例如:要保证windows上传到Linux的…

【机器学习】模式识别

1 概述 模式识别,简单来讲,就是分类问题。 模式识别应用:医学影像分析、人脸识别、车牌识别、遥感图像 2 模式分类器 分类器的分类:线性分类器、非线性分类器、最近邻分类器 2.1 分类器的训练(学习)过…

【DevOps 工具链】软件版本号命名规范 - 3种规则(读这一篇就够了)

文章目录 1、简述2、常见软件的版本号命名规则3、版本号命名规范整理3.1、XYZ/MMP3.1.1、规则3.1.2、确定3.1.3、举例3.1.4、详细规则 3.2、XYZD/MMPD3.3、VRC3.3.1、规则3.3.2、对"Vxxx"的说明3.3.3、对"Rxxx"的说明3.3.4、对"LLL"的说明3.3.5、…

MyBatis:Generator

MyBatis Generator附批量操作分页查询存储过程 Generator 介绍网址:Introduction to MyBatis Generator Generator ,一个用于 MyBatis 的代码生成工具,可以根据数据库表结构自动生成对应的实体类、DAO 接口和 SQL 映射文件,提高…

使用Visual Studio调试VisionPro脚本

使用Visual Studio调试VisionPro脚本 方法一 : 修改项目文件 csproj步骤: 方法二 : Visual Studio附加功能步骤: 方法一 : 修改项目文件 csproj 步骤: 开启VisionPro脚本调试功能 创建一个VisionPro程序…

【MySQL学习笔记009】事务

一、事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 二、事务操作 1、操作1 查看/设置事务提交方式 select a…

竞赛保研 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 🔥 优质竞赛项目系列&#xf…

07 Vue3框架简介

文章目录 一、Vue3简介1. 简介2. 相关网站3. 前端技术对比4. JS前端框架5. Vue核心内容6. 使用方式 二、基础概念1. 创建一个应用2. 变量双向绑定(v-model)3. 条件控制(v-if)4. 数组遍历(v-for)5. 绑定事件…

MATLAB信号处理与应用 读书笔记 一

完成了基本操作,今天组数也正常,需要对应解决fsctrl文件中的信号处理相关 重点关注4傅里叶变换,6FIR滤波器,10信号处理中的应用字符的链接[aa,bb]; N18;N216; n0:N-1;k10:N1-1;k20:N2-1; w2*pi*(0:2047)/2048; Xw(1-…

JavaWeb后门(webshell)基础

0x00 基础 JSP JSP全称为JavaServer Pages&#xff0c;是一种用于开发支持动态内容的Web页面的技术。它有助于开发人员通过使用特殊的JSP标记在HTML页面中插入Java代码&#xff0c;其中大多数以<&#xff05;开头&#xff0c;以&#xff05;>结尾。Java是一种通用的计算…

《C++避坑神器·二十五》简单搞懂json文件的读写之遍历json文件读写

json.hpp库放在文章末尾 1、遍历json文件读写 &#xff08;1&#xff09;插入新键值对到json之情形1 原来json文件如下所示&#xff1a; {"Connection": {"IpAddress": "192.168.20.1","Rock": 0,"Solt": 1}, "Data…

QT trimmed和simplified

trimmed&#xff1a;去除了字符串开头前和结尾后的空白&#xff1b; simplified&#xff1a;去除了字符串开头前和结尾后的空白&#xff0c;以及中间内部的空白字符也去掉&#xff08;\t,\n,\v,\f,\r和 &#xff09; 代码&#xff1a; QString str " 1 2 3 4 5 …

【MySQL】脏读、不可重复读、幻读介绍及代码解释

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 数 据 库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 数据库事务隔离级别是关系数据库管理系统中一个重要的概念&#xff0c;它涉及到多个事务并发执行…

OpenEuler安装内网穿透工具实现ssh连接openEuler系统

文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 本文主要介绍在openEuler中安装Cpolar内网穿透工具实现远程也可以ssh 连接openEuler系统使用. 欧拉操作系统(openEuler, 简称“欧拉”…

ToB还是ToC?工业级与消费级AR眼镜都能干什么?

来源&#xff1a;虹科数字化与AR 虹科分享 | ToB还是ToC&#xff1f;工业级与消费级AR眼镜都能干什么&#xff1f; 原文链接&#xff1a;https://mp.weixin.qq.com/s/lyTASoKm29woIbfcKBtMvQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 随着科技的飞速发展&#…

摸索若依框架是如何实现权限过滤的

摸索若依框架是如何实现权限过滤的 这篇文章&#xff0c;我也是作为一个优秀开源框架的学习者&#xff0c;在这里摸索这套框架是如何实现权限过滤的&#xff0c;这个封装对于入行Java半年之余的我来说&#xff0c;理解起来有些困难&#xff0c;所以&#xff0c;文章只是作为一个…

python调用GPT API

每次让gpt给我生成一个调用api的程序时&#xff0c;他经常会调用以前的一些api的方法&#xff0c;导致我的程序运行错误&#xff0c;所以这期记录一下使用新的方法区调用api 参考网址 Migration Guide&#xff0c;这里简要地概括了一下新版本做了哪些更改 OpenAI Python API l…

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…

IntelliJ IDEA插件

插件安装目录&#xff1a;C:\Users\<username>\AppData\Roaming\JetBrains\IntelliJIdea2021.2\plugins aiXcoder Code Completer&#xff1a;代码补全 Bookmark-X&#xff1a;书签分类 使用方法&#xff1a;鼠标移动到某一行&#xff0c;按ALT SHIFT D