[轉帖]ldap配置系列三:grafana集成ldap

https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_51_ldap_for_grafana.html

grafana的簡介

 grafana是一個類似kibana的東西,是對來自各種數據源的數據進行實時展示的平臺,擁有這牛逼的外觀。給一個官方的demo體驗地址: https://play.grafana.org/d/000000012/grafana-play-home?orgId=1

這裏提供一個demo截圖。

grafana的安裝

grfana安裝的官方參考: http://docs.grafana.org/installation/rpm/

複製代碼
[root@VM_0_15_centos ~]# sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
[root@VM_0_15_centos ~]# rpm -ql grafana |grep /etc
/etc/grafana
/etc/init.d/grafana-server
/etc/sysconfig/grafana-server

[root@VM_0_15_centos ~]# systemctl start grafana-server
[root@VM_0_15_centos ~]# systemctl status grafana-server

[root@VM_0_15_centos ~]# firewall-cmd --permanent  --add-port=3000/tcp
success
[root@VM_0_15_centos ~]# firewall-cmd --reload 
success

# 添加域名grafana.linuxpanda.tech 
# web訪問下grafana.linuxpanda.tech:3000 

複製代碼

主界面如下: 

 

默認的用戶名和密碼都是admin。

ldap用戶組和用戶創建

如果沒有ldap服務,可以參考: https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_52_ldap.html

這裏我們使用 ldapadmin.exe 這個小軟件連接到ldap服務, 在group這個ou裏面添加一個grafana的ou,然後在grafana這個ou裏面添加3個組, 對應管理,編輯和預覽。

創建三個用戶test01,test02,test03 ,設置密碼爲oracle, 讓其分別屬於三個不同的組,方便後續的測試。

ldap配置文件

grafana的ldap配置官方參考: http://docs.grafana.org/installation/ldap/

grafana.ini配置

複製代碼
[root@VM_0_15_centos ~]# cd /etc/grafana/
[root@VM_0_15_centos grafana]# ll
total 24
-rw-r----- 1 root grafana 13655 Sep  5 21:39 grafana.ini
-rw-r----- 1 root grafana  3468 Sep  5 21:39 ldap.toml
drwxr-xr-x 4 root grafana  4096 Sep  5 21:39 provisioning
[root@VM_0_15_centos grafana]# cp ldap.toml  ldap.toml.default 
[root@VM_0_15_centos grafana]# cp grafana.ini grafana.ini.default
[root@VM_0_15_centos grafana]# chown grafana.grafana grafana.ini ldap.toml  [root@VM_0_15_centos grafana]# vim grafana.ini # 這個文件修改2項,log的其實沒有必要,但是ldap調試比較麻煩,建議先開啓debug,等配置好ldap後,在修改回去info級別。 [auth.ldap] enabled = true [log] level = debug
複製代碼

配置前需要先做幾個查詢

查詢所有用戶

複製代碼
[root@VM_0_15_centos ~]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=people,dc=linuxpanda,dc=tech" 
dn: ou=people,dc=linuxpanda,dc=tech
objectClass: organizationalUnit
ou: user
ou: people

dn: uid=test01,ou=people,dc=linuxpanda,dc=tech
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 0
givenName: test01
sn: test01
displayName:: 5rWL6K+VMQ==
uid: test01
homeDirectory: /home/test01
loginShell: /bin/bash
mail: [email protected]
cn:: 5rWL6K+VMQ==
uidNumber: 55545
userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9

dn: uid=test02,ou=people,dc=linuxpanda,dc=tech
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 0
givenName: test02
sn: test02
displayName:: 5rWL6K+VMg==
uid: test02
homeDirectory: /home/test02
loginShell: /bin/bash
mail: [email protected]
cn:: 5rWL6K+VMg==
uidNumber: 50880
userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9

dn: uid=test03,ou=people,dc=linuxpanda,dc=tech
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 0
givenName: test03
sn: test03
displayName:: 5rWL6K+VMw==
uid: test03
homeDirectory: /home/test03
loginShell: /bin/bash
mail: [email protected]
cn:: 5rWL6K+VMw==
uidNumber: 46507
userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9
複製代碼

查詢特定用戶

複製代碼
[root@VM_0_15_centos ~]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=people,dc=linuxpanda,dc=tech" "(uid=test01)"   
dn: uid=test01,ou=people,dc=linuxpanda,dc=tech
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 0
givenName: test01
sn: test01
displayName:: 5rWL6K+VMQ==
uid: test01
homeDirectory: /home/test01
loginShell: /bin/bash
mail: [email protected]
cn:: 5rWL6K+VMQ==
uidNumber: 55545
userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9
複製代碼

查詢所有組

複製代碼
[root@VM_0_15_centos grafana]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=grafana,ou=group,dc=linuxpanda,dc=tech"  
dn: ou=grafana,ou=group,dc=linuxpanda,dc=tech
objectClass: top
objectClass: organizationalUnit
ou: grafana

dn: cn=grafana-admins,ou=grafana,ou=group,dc=linuxpanda,dc=tech
objectClass: posixGroup
objectClass: top
cn: grafana-admins
gidNumber: 49004
memberUid: test01

dn: cn=grafana-editors,ou=grafana,ou=group,dc=linuxpanda,dc=tech
objectClass: posixGroup
objectClass: top
gidNumber: 34366
cn: grafana-editors
memberUid: test02

dn: cn=grafana-viewers,ou=grafana,ou=group,dc=linuxpanda,dc=tech
objectClass: posixGroup
objectClass: top
cn: grafana-viewers
gidNumber: 25527
memberUid: test03
複製代碼

 查詢用戶所在的組

複製代碼
[root@VM_0_15_centos grafana]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=grafana,ou=group,dc=linuxpanda,dc=tech"   "(&(objectClass=posixGroup)(memberUid=test03))"
dn: cn=grafana-viewers,ou=grafana,ou=group,dc=linuxpanda,dc=tech
objectClass: posixGroup
objectClass: top
cn: grafana-viewers
gidNumber: 25527
memberUid: test03
複製代碼

修改ldap.toml文件

複製代碼
[root@VM_0_15_centos grafana]# vim ldap.toml
[root@VM_0_15_centos grafana]# cat ldap.toml

[[servers]]
host = "ldap.linuxpanda.tech"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false

bind_dn = "cn=admin,dc=linuxpanda,dc=tech"
bind_password = 'oracle'

search_filter = "(uid=%s)"

search_base_dns = ["ou=people,dc=linuxpanda,dc=tech"]

group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
group_search_base_dns = ["ou=grafana,ou=group,dc=linuxpanda,dc=tech"]
[servers.attributes]
name = "givenName"
surname = "sn"
username = "uid"
#member_of = "memberOf"
member_of="cn"
email =  "mail"

[[servers.group_mappings]]
group_dn = "grafana-admins"
org_role = "Admin"

[[servers.group_mappings]]
group_dn = "grafana-editors"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "grafana-viewers"
#group_dn = "*"
org_role = "Viewer"
複製代碼

主要配置說明

host:就是指定你的ldap服務器,可以指定多個,需要分隔符。

port:你的ldap服務器的監聽的端口。

bind_dn: 你需要特定ou的管理員賬號,我這裏使用了域管理者。

bind_password: 上面賬號的密碼。

search_filter:  用戶搜索的過濾表達式,配合search_base_dns。

search_base_dns: 用戶搜索的範圍,這裏在people這個ou裏面搜索所有的用戶,需要配合search_filter來完成用戶的過濾。

group_search_filter: 組搜索的過濾表達式,配合group_search_base_dns。

group_search_base_dns: 指定組搜索的範圍,我們的grafana這個ou裏面設置了3個組。

servers.attributes: 這個主要是用戶獲取特定提取到的用戶條目有特定字段的提取, username從查詢的用戶信息取特定字段值作爲grafana的用戶名, 

                              member_of 代表,根據group_search_base_dns和group_search_filter 得到特定的一個組後,取那個字段作爲組名字。 這個取到的結果需要和下面的映射保持一致。

                              email代表取特定用戶的mail字段作爲grafana用戶的email信息。

servers_group_mappings: 這個是用於定義ldap用戶組和grafana角色組的映射關係的, 上面member_of ,group_search_base_dns和group_search_filter 這三個條件可以獲取到ldap的組名,這裏要和三個條件獲取的一致。

 

一張圖說清楚

修改完畢重啓服務進行測試。

最終結果圖

修改grafana的日誌級別爲info。

 

 

調試

 判定ldap服務是否可通

[root@VM_0_15_centos grafana]# telnet ldap.linuxpanda.tech 389
Trying 58.87.98.84...
Connected to ldap.linuxpanda.tech.
Escape character is '^]'.

確定開啓了ldap配置

檢查grafana.ini文件確認有ldap=true啓用的,默認去掉註釋還是false,注意啦。

關注日誌信息

主要的日誌有2個,一個是grafana的日誌, 一個是ldap的日誌。

[root@VM_0_15_centos grafana]# journalctl -f  
Sep 05 22:51:50 VM_0_15_centos grafana-server[12052]: t=2018-09-05T22:51:50+0800 lvl=dbug msg="Ldap User found" logger=ldap info="(*login.LdapUserInfo)(0xc420030fc0)({\n DN: (string) (len=42) \"uid=test01,ou=people,dc=linuxpanda,dc=tech\",\n FirstName: (string) (len=6) \"test01\",\n LastName: (string) (len=6) \"test01\",\n Username: (string) (len=22) \"[email protected]\",\n Email: (string) (len=22) \"[email protected]\",\n MemberOf: ([]string) <nil>\n})\n"
Sep 05 22:51:50 VM_0_15_centos grafana-server[12052]: t=2018-09-05T22:51:50+0800 lvl=dbug msg="Updating last user_seen_at" logger=context userId=2 orgId=1 [email protected] user_id=2
[root@VM_0_15_centos grafana]# tail -f /var/log/slapd/slapd.log 

參考 

grafana官方幫助文檔: http://docs.grafana.org/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章