1 Star 0 Fork 0

sqos/beats

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.github
auditbeat
deploy/kubernetes
dev-tools
docs/devguide
filebeat
generator
heartbeat
libbeat
_meta
api
autodiscover
beat
cfgfile
cloudid
cmd
common
dashboards
docs
keystore
kibana
testdata
fields_transformer.go
fields_transformer_test.go
index_pattern_generator.go
index_pattern_generator_test.go
transformer.go
logp
metric/system
ml-importer
mock
monitoring
outputs
paths
plugin
processors
publisher
scripts
service
setup/kibana
template
testing
tests
version
.gitignore
Dockerfile
Makefile
README.md
docker-compose.yml
libbeat.go
libbeat_test.go
metricbeat
packetbeat
script
testing/environments
vendor
winlogbeat
.appveyor.yml
.editorconfig
.gitattributes
.gitignore
.go-version
.pylintrc
.travis.yml
CHANGELOG.asciidoc
CONTRIBUTING.md
LICENSE.txt
Makefile
NOTICE.txt
README.md
Vagrantfile
codecov.yml
reviewdog.yml
setup.yml
克隆/下载
index_pattern_generator.go 3.82 KB
一键复制 编辑 原始数据 按行查看 历史
package kibana
import (
"encoding/json"
"io/ioutil"
"os"
"path/filepath"
"regexp"
"github.com/elastic/beats/libbeat/common"
)
type IndexPatternGenerator struct {
indexName string
beatVersion string
fieldsYaml string
version common.Version
targetDir string
targetFilename string
}
// Create an instance of the Kibana Index Pattern Generator
func NewGenerator(indexName, beatName, beatDir, beatVersion string, version common.Version) (*IndexPatternGenerator, error) {
beatName = clean(beatName)
fieldsYaml := filepath.Join(beatDir, "fields.yml")
if _, err := os.Stat(fieldsYaml); err != nil {
return nil, err
}
return &IndexPatternGenerator{
indexName: indexName,
fieldsYaml: fieldsYaml,
beatVersion: beatVersion,
version: version,
targetDir: createTargetDir(beatDir, version),
targetFilename: beatName + ".json",
}, nil
}
// Create the Index-Pattern for Kibana for 5.x and default.
func (i *IndexPatternGenerator) Generate() (string, error) {
idxPattern, err := i.generate()
if err != nil {
return "", err
}
if i.version.Major >= 6 {
idxPattern = i.generateMinVersion6(idxPattern)
}
file := filepath.Join(i.targetDir, i.targetFilename)
err = dumpToFile(file, idxPattern)
return file, err
}
func (i *IndexPatternGenerator) generate() (common.MapStr, error) {
indexPattern := common.MapStr{
"timeFieldName": "@timestamp",
"title": i.indexName,
}
err := i.addGeneral(&indexPattern)
if err != nil {
return nil, err
}
err = i.addFieldsSpecific(&indexPattern)
if err != nil {
return nil, err
}
return indexPattern, nil
}
func (i *IndexPatternGenerator) generateMinVersion6(attrs common.MapStr) common.MapStr {
out := common.MapStr{
"version": i.beatVersion,
"objects": []common.MapStr{
common.MapStr{
"type": "index-pattern",
"id": i.indexName,
"version": 1,
"attributes": attrs,
},
},
}
return out
}
func (i *IndexPatternGenerator) addGeneral(indexPattern *common.MapStr) error {
kibanaEntries, err := loadKibanaEntriesFromYaml(i.fieldsYaml)
if err != nil {
return err
}
transformed := newTransformer(kibanaEntries).transform()
if srcFilters, ok := transformed["sourceFilters"].([]common.MapStr); ok {
sourceFiltersBytes, err := json.Marshal(srcFilters)
if err != nil {
return err
}
(*indexPattern)["sourceFilters"] = string(sourceFiltersBytes)
}
return nil
}
func (i *IndexPatternGenerator) addFieldsSpecific(indexPattern *common.MapStr) error {
fields, err := common.LoadFieldsYaml(i.fieldsYaml)
if err != nil {
return err
}
transformer, err := newFieldsTransformer(&i.version, fields)
if err != nil {
return err
}
transformed, err := transformer.transform()
if err != nil {
return err
}
fieldsBytes, err := json.Marshal(transformed["fields"])
if err != nil {
return err
}
(*indexPattern)["fields"] = string(fieldsBytes)
fieldFormatBytes, err := json.Marshal(transformed["fieldFormatMap"])
if err != nil {
return err
}
(*indexPattern)["fieldFormatMap"] = string(fieldFormatBytes)
return nil
}
func clean(name string) string {
reg := regexp.MustCompile("[^a-zA-Z0-9_]+")
return reg.ReplaceAllString(name, "")
}
func dumpToFile(f string, pattern common.MapStr) error {
patternIndent, err := json.MarshalIndent(pattern, "", " ")
if err != nil {
return err
}
err = ioutil.WriteFile(f, patternIndent, 0644)
if err != nil {
return err
}
return nil
}
func createTargetDir(baseDir string, version common.Version) string {
targetDir := filepath.Join(baseDir, "_meta", "kibana", getVersionPath(version), "index-pattern")
if _, err := os.Stat(targetDir); os.IsNotExist(err) {
os.MkdirAll(targetDir, 0777)
}
return targetDir
}
func getVersionPath(version common.Version) string {
versionPath := "6"
if version.Major == 5 {
versionPath = "5"
}
return versionPath
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sqos/beats.git
git@gitee.com:sqos/beats.git
sqos
beats
beats
v6.2.0

搜索帮助