我的ELK搭建笔记(阿里云上部署)【转】

下面一段摘抄自互联网 http://baidu.blog.51cto.com/71938/1676798

ELK平台是当前应用比较广泛的一套开源实时日志分析解决方案。ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。

官方网站: https://www.elastic.co/products

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
1

安装配置

1.1 CentOS 7.x环境准备

1.1.1 安装操作系统

以阿里云ECS主机为例,安装系统时选择CentOS 7.2 64位版本。

1.1.2 更新系统软件包(可选)

[root@elk-test ~]# yum update

1.1.3 更改主机名(可选)

[root@iZ2ze1filcblgjr9dcoxioZ ~]# hostnameelk-test

[root@iZ2ze1filcblgjr9dcoxioZ ~]# hostname

# elk-test

[root@elk-test ~]#

1.1.4 创建应用账号(必选)

以应用账号身份启动ElasticSearch、Logstash和Kibana

[root@elk-test ~]# useradd elk-test

1.1.5 安装Java运行环境(可选)

下载JRE安装包,并上传到服务器root用户目录

以root身份安装JRE:

yum localinstall jre-8u121-linux-x64.rpm

配置Java环境变量:

  • 编辑文件/etc/profile
  • 在文件末尾增加如下内容

验证Java环境,执行命令java -version查看Java版本信息,如果一切正常的话,能看到如下信息:

java version “1.8.0_121”

Java(TM) SE Runtime Environment (build 1.8.0_121-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

如有需要,也可下载Server JRE手工安装。

1.2 ELK安装

1.2.1 安装ElasticSearch with x-pac

执行命令su – elk-test切换到应用账户elk-test,下载和安装ElasticSearch和x-pack安全组件。如果你不需要安全认证,x-pack组件可以不用安装,相应的配置参数也不必设置。

根据需要,修改文件ElasticSearch目录下config/jvm.options文件,调整jvm内存参数。

修改监听端口,允许外部系统远程访问:

  • 编辑文件config/elasticsearch.yml
  • 修改参数network.host的数值

启动ElasticSearch

[elk-test@elk-test elasticsearch-5.0.0]$bin/elasticsearch

验证ElasticSearch服务,执行命令:

curl http://elastic:changeme@10.0.0.136:9200

期待返回内容如下:

1.2.2 Trouble shooting for elasticsearch

  • max file descriptors

max file descriptors [65535] forelasticsearch process likely too low, increase to at least [65536]

 

修改文件/etc/security/limits.conf,末尾增加如下内容:

* soft nofile 65536

* hard nofile 65536

  • max virtual memory

max virtual memory areas vm.max_map_count[65530] likely too low, increase to at least [262144]

  • 修改文件/etc/sysctl.conf
  • 设置参数vm.max_map_count= 262144
  • 执行命令sysctl -p

完成以上步骤,重新su – elk-test再来启动ElasticSearch。

1.2.3 安装Logstash

下载Logstash

测试一段syslog日志文本。在logstash主目录创建配置文件sample.conf,内容如下

 

执行命令bing/logstsh -f sample.comf,启动Logstash。

启动后,输入以下内容:

Jan 19 12:28:31 elk-test sshd[13990]:pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=sshruser= rhost=92.246.190.31 user=root

 

可以看到Logstash在Console返回的输出内容,同时以上内容也发送到了ElasticSearch。

1.2.4 Trouble Shooting for Logstash

为什么Logstash启动特别缓慢?

原因可能是JVM的随机数字生成参数导致,诊断和修改方式:

  • 修改文件$JAVA_HOME/jre/lib/security/java.security
  • 设置参数securerandom.source=file:/dev/urandom

重新启动Logstash,是不是快多了?

为什么要这么做,我已经帮你搜好了,请参考以下文档:
– StackOverflow-Logstashstartup time #5491
– Orace官方-Avoiding JVM Delays Caused byRandom Number Generation

1.2.5 安装Kibana with x-pack

执行命令su – elk-test切换到应用账户elk-test,下载和安装Kibana和x-pack安全组件。

设置Kibaba对外开放的IP和ElasticSearch的url

  • 编辑文件config/kibana.yml
  • 设置参数server.host和elasticsearch.url

启动Kibana

[elk-test@elk-testkibana-5.0.0-linux-x86_64]$ bin/kibana

访问Kibanna,验证服务,用户名/密码:elastic/changeme

看到如下界面,即表示成功,稍后再来配置。

1.2.6 Kibana界面日志检索

只有当第一条日志通过Logstash进入ElasticSearch后,才能配置Kibana索引pattern。

操作方法是:进入Kibana设置界面,点击Create按钮。其中Index Pattern名称必须与Logstash中output参数设置的一致。如果output参数没有设置,则默认为logstash-*

如果你的日志中有特定的时间字段,这里可以单独设置。如果Logstash的output中已经配置了index的名称,则必须在新的日志进入ElasticSearch后,才能在Kibana上创建新的index pattern。进入Kibana的Dashboard,搜索日志,认真体验。

2

最佳实践

2.1 Logstash & JDBC

2.1.1 安装jdbc-input插件

进入Logstash目录,执行命令bin/logstash-plugin install logstash-input-jdbc安装JDBC输入插件。

2.1.2 下载jdbc-mysql连接驱动

访问MySQL网站,https://dev.mysql.com/downloads/connector/j/,下载mysql-connector-java-5.1.40,或执行命令下载。

2.1.3 配置jdbc日志收集参数

创建文件jdbc-login-logs-logstash.conf,并设置Logstash每隔5分钟(*/5 * * * *)连接一次数据库,将新增的日志发送到ElasticSearch服务器。

2.1.4 启动Logstash连接数据库收集日志

执行命令bin/logstash -f jdbc-login-logs-logstash.conf

2.2 Kibana相关

2.2.1 获取指定索引下指定类型日志的映射表

Kibana主界面左侧,点击开发工具按钮。

进入Console界面,执行如下命令:
GET logstash-nginx/_mappings/alm
注意:替换alm字符串为你自己的日志类型(来自Logstash的output参数)

返回如下:

2.2.2 修改数据类型映射mappings

已经创建的mappings是不能直接修改的。通常是删除后再创建一个新的修改后的mappings版本。参考文档:ChangingMapping with Zero Downtime

2.2.3 判断字段是否存在

搜索执行_exists_:field_name,如:_exists_:login_ip

3

参考资料

折腾过程中,得到了以下参考资料的帮助,一并感谢!

以上内容只是最基础的Hello World版本ELK部署说明,还不涉及到集群、分布式收集、grok高级技巧等。关于复杂场景下的ELK部署和应用,等我功力提升后再来分享啦!

为解决文中部分图片不够清晰问题,您也可以通过以下链接查看原文(高清)内容:

https://pan.baidu.com/s/1nv15BWt

此条目发表在未分类, 经验技术分类目录。将固定链接加入收藏夹。