func DefineCommandLine() (*CommandLine, error) { var cl CommandLine cl.flagSet = flag.NewFlagSet("import", flag.ContinueOnError) cl.flagSet.Usage = func() { os.Stderr.WriteString(usage) cl.flagSet.PrintDefaults() } cl.flagSet.StringVar(&cl.opt.KibanaIndex, "k", ".kibana", "Kibana index") cl.flagSet.StringVar(&cl.opt.ES, "es", "http://127.0.0.1:9200", "Elasticsearch URL") cl.flagSet.StringVar(&cl.opt.User, "user", "", "Username to connect to Elasticsearch. By default no username is passed.") cl.flagSet.StringVar(&cl.opt.Pass, "pass", "", "Password to connect to Elasticsearch. By default no password is passed.") cl.flagSet.StringVar(&cl.opt.Index, "i", "", "The Elasticsearch index name. This overwrites the index name defined in the dashboards and index pattern. Example: metricbeat-*") cl.flagSet.StringVar(&cl.opt.Dir, "dir", "", "Directory containing the subdirectories: dashboard, visualization, search, index-pattern. Example: etc/kibana/") cl.flagSet.StringVar(&cl.opt.File, "file", "", "Zip archive file containing the Beats dashboards. The archive contains a directory for each Beat.") cl.flagSet.StringVar(&cl.opt.URL, "url", fmt.Sprintf("https://artifacts.elastic.co/downloads/beats/beats-dashboards/beats-dashboards-%s.zip", lbeat.GetDefaultVersion()), "URL to the zip archive containing the Beats dashboards") cl.flagSet.StringVar(&cl.opt.Beat, "beat", beat, "The Beat name that is used to select what dashboards to install from a zip. An empty string selects all.") cl.flagSet.BoolVar(&cl.opt.OnlyDashboards, "only-dashboards", false, "Import only dashboards together with visualizations and searches. By default import both, dashboards and the index-pattern.") cl.flagSet.BoolVar(&cl.opt.OnlyIndex, "only-index", false, "Import only the index-pattern. By default imports both, dashboards and the index pattern.") cl.flagSet.BoolVar(&cl.opt.Snapshot, "snapshot", false, "Import dashboards from snapshot builds.") cl.flagSet.StringVar(&cl.opt.CertificateAuthority, "cacert", "", "Certificate Authority for server verification") cl.flagSet.StringVar(&cl.opt.Certificate, "cert", "", "Certificate for SSL client authentication in PEM format.") cl.flagSet.StringVar(&cl.opt.CertificateKey, "key", "", "Client Certificate Key in PEM format.") cl.flagSet.BoolVar(&cl.opt.Insecure, "insecure", false, `Allows "insecure" SSL connections`) return &cl, nil }
func (imp Importer) ImportArchive() error { var archive string target, err := ioutil.TempDir("", "tmp") if err != nil { return errors.New("fail to generate the temporary directory") } if err = os.MkdirAll(target, 0755); err != nil { return fmt.Errorf("fail to create the temporary directory: %v", target) } defer os.RemoveAll(target) // clean up fmt.Println("Create temporary directory", target) if imp.cl.opt.File != "" { archive = imp.cl.opt.File } else if imp.cl.opt.Snapshot { // In case snapshot is set, snapshot version is fetched url := fmt.Sprintf("https://beats-nightlies.s3.amazonaws.com/dashboards/beats-dashboards-%s-SNAPSHOT.zip", lbeat.GetDefaultVersion()) archive, err = downloadFile(url, target) if err != nil { return fmt.Errorf("fail to download snapshot file: %s", url) } } else if imp.cl.opt.URL != "" { archive, err = downloadFile(imp.cl.opt.URL, target) if err != nil { return fmt.Errorf("fail to download file: %s", imp.cl.opt.URL) } } else { return errors.New("No archive file or URL is set. Please use -file or -url option.") } err = unzip(archive, target) if err != nil { return fmt.Errorf("fail to unzip the archive: %s", archive) } dirs, err := getDirectories(target) if err != nil { return err } if len(dirs) != 1 { return fmt.Errorf("too many directories under %s", target) } dirs, err = getDirectories(dirs[0]) if err != nil { return err } for _, dir := range dirs { fmt.Println(dir) if imp.cl.opt.Beat == "" || filepath.Base(dir) == imp.cl.opt.Beat { err = imp.ImportKibana(dir) if err != nil { return err } } } return nil }
func ParseCommandLine() (*CommandLine, error) { var cl CommandLine cl.flagSet = flag.NewFlagSet("import", flag.ContinueOnError) cl.flagSet.Usage = func() { os.Stderr.WriteString(usage) cl.flagSet.PrintDefaults() } cl.flagSet.StringVar(&cl.opt.KibanaIndex, "k", ".kibana", "Kibana index") cl.flagSet.StringVar(&cl.opt.ES, "es", "http://127.0.0.1:9200", "Elasticsearch URL") cl.flagSet.StringVar(&cl.opt.User, "user", "", "Username to connect to Elasticsearch") cl.flagSet.StringVar(&cl.opt.Pass, "pass", "", "Password to connect to Elasticsearch") cl.flagSet.StringVar(&cl.opt.Index, "i", "", "Overwrites the Elasticsearch index name. For example you can replaces metricbeat-* with custombeat-*") cl.flagSet.StringVar(&cl.opt.Dir, "dir", "", "Directory containing the subdirectories: dashboard, visualization, search, index-pattern. eg. kibana/") cl.flagSet.StringVar(&cl.opt.File, "file", "", "Zip archive file containing the Beats dashboards.") cl.flagSet.StringVar(&cl.opt.Url, "url", fmt.Sprintf("https://download.elastic.co/beats/dashboards/beats-dashboards-%s.zip", beat.GetDefaultVersion()), "URL to the zip archive containing the Beats dashboards") cl.flagSet.StringVar(&cl.opt.Beat, "beat", "", "Specify the Beat name, in case the archive contains the dashboards for multiple Beats.") cl.flagSet.BoolVar(&cl.opt.OnlyDashboards, "only-dashboards", false, "Import only dashboards together with visualizations and searches. By default imports both, dashboards and the index-pattern.") cl.flagSet.BoolVar(&cl.opt.OnlyIndex, "only-index", false, "Import only the index-pattern. By default imports both, dashboards and the index pattern.") return &cl, nil }
func DefineCommandLine() (*CommandLine, error) { var cl CommandLine cl.flagSet = flag.NewFlagSet("import", flag.ContinueOnError) cl.flagSet.Usage = func() { os.Stderr.WriteString(usage) cl.flagSet.PrintDefaults() } cl.flagSet.StringVar(&cl.opt.KibanaIndex, "k", ".kibana", "Kibana index") cl.flagSet.StringVar(&cl.opt.ES, "es", "http://127.0.0.1:9200", "Elasticsearch URL") cl.flagSet.StringVar(&cl.opt.User, "user", "", "Username to connect to Elasticsearch. By default no username is passed.") cl.flagSet.StringVar(&cl.opt.Pass, "pass", "", "Password to connect to Elasticsearch. By default no password is passed.") cl.flagSet.StringVar(&cl.opt.Index, "i", "", "The Elasticsearch index name. This overwrites the index name defined in the dashboards and index pattern. Example: metricbeat-*") cl.flagSet.StringVar(&cl.opt.Dir, "dir", "", "Directory containing the subdirectories: dashboard, visualization, search, index-pattern. Example: etc/kibana/") cl.flagSet.StringVar(&cl.opt.File, "file", "", "Zip archive file containing the Beats dashboards. The archive contains a directory for each Beat.") cl.flagSet.StringVar(&cl.opt.Url, "url", fmt.Sprintf("https://download.elastic.co/beats/beats-dashboards/beats-dashboards-%s.zip", lbeat.GetDefaultVersion()), "URL to the zip archive containing the Beats dashboards") cl.flagSet.StringVar(&cl.opt.Beat, "beat", beat, "The Beat name, in case a zip archive is passed as input") cl.flagSet.BoolVar(&cl.opt.OnlyDashboards, "only-dashboards", false, "Import only dashboards together with visualizations and searches. By default import both, dashboards and the index-pattern.") cl.flagSet.BoolVar(&cl.opt.OnlyIndex, "only-index", false, "Import only the index-pattern. By default imports both, dashboards and the index pattern.") cl.flagSet.BoolVar(&cl.opt.Snapshot, "snapshot", false, "Import dashboards from snapshot builds.") return &cl, nil }
You can import the dashboards, visualizations, searches, and the index pattern for any Beat: 1. from a local directory: ./import_dashboards -dir etc/kibana 2. from a local zip archive: ./import_dashboards -beat metricbeat -file beats-dashboards-%s.zip 3. from a zip archive available online: ./import_dashboards -beat metricbeat -url http://download.elastic.co/beats/dashboards/beats-dashboards-%s.zip If the archive contains dashboards for multiple Beats, you need to pass the Beat name in -beat option: ./import_dashboards -beat metricbeat -url http://download.elastic.co/beats/dashboards/beats-dashboards-%s.zip To import only the index-pattern for a single Beat, from the same version use: ./import_dashboards -only-index -beat metricbeat Options: `, beat.GetDefaultVersion(), beat.GetDefaultVersion(), beat.GetDefaultVersion()) type Options struct { KibanaIndex string ES string Index string Dir string File string Beat string Url string User string Pass string OnlyDashboards bool OnlyIndex bool }