安装ELK的步骤分为以下几个部分:
-
安装Docker:这里不再赘述,可以参考Docker官网或者其他教程。
-
拉取ELK镜像:
docker pull sebp/elk
注:这里使用的是sebp/elk镜像,该镜像包含了Elasticsearch、Logstash和Kibana三个组件,并且已经配置好了它们之间的关系。
- 启动ELK容器:
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
参数说明:
-
-p
:映射容器端口到主机端口,其中,5601是Kibana的端口,9200是Elasticsearch的HTTP端口,5044是Logstash的端口。 -
-it
:以交互式方式启动容器。 -
--name
:指定容器名称。 -
sebp/elk
:使用的镜像名称。 -
访问Kibana:
打开浏览器,访问http://your_ip:5601,即可访问Kibana控制台。
- 配置Logstash:
Logstash是用于接收、解析和处理日志数据的工具,可以通过配置文件进行配置。假设我们要收集Docker的日志数据,可以按照以下步骤进行配置:
-
创建配置文件
docker-logstash.conf
,内容如下:“`
input {
gelf {
port => “12201”
}
}output {
elasticsearch {
hosts => “elasticsearch:9200”
index => “docker-%{+YYYY.MM.dd}”
}
}
“`该配置文件表示使用gelf协议接收日志数据,并将数据输出到Elasticsearch中,并指定了Index名称为docker-当前日期。
-
将配置文件挂载到Logstash容器中:
docker run -v /path/to/docker-logstash.conf:/etc/logstash/conf.d/docker-logstash.conf --link elk:elasticsearch -it --name logstash sebp/elk logstash -f /etc/logstash/conf.d/docker-logstash.conf
参数说明:
-
-v
:将主机上的配置文件挂载到容器中,例如:/path/to/docker-logstash.conf是本地的配置文件路径,/etc/logstash/conf.d/docker-logstash.conf是目标路径。 -
--link
:与Elasticsearch容器进行链接。 -
-it
:以交互式方式启动容器。 -
--name
:指定容器名称。 -
sebp/elk
:使用的镜像名称。 -
logstash -f /etc/logstash/conf.d/docker-logstash.conf
:启动Logstash服务,并指定配置文件路径。
-
当Logstash开始工作时,它将从Docker容器发送到12201端口上的日志数据,并将它们存储到Elasticsearch的docker-index索引中。
至此,ELK安装和配置完毕,现在可以通过访问Kibana控制台来查看和分析日志数据了。
示例:
-
收集Apache日志:
“`
input {
file {
path => “/var/log/apache2/access.log”
type => “apache_access”
}
}filter {
if [type] == “apache_access” {
grok {
match => { “message” => “%{COMBINEDAPACHELOG}” }
}date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } }
}
output {
elasticsearch {
hosts => “elasticsearch:9200”
index => “apache-%{+YYYY.MM.dd}”
}
}
“`该配置文件表示从Apache的access.log文件中收集日志数据,使用grok插件对数据进行解析和处理,并将处理后的数据输出到Elasticsearch中,并指定Index名称为apache-当前时间。
-
收集MySQL慢查询日志:
“`
input {
file {
path => “/var/log/mysql/mysql-slow.log”
type => “mysql_slow_query”
start_position => “beginning”
}
}filter {
if [type] == “mysql_slow_query” {
grok {
match => { “message” => “# Time: %{DATA:time}\n# User@Host: %{DATA:user_host}\n# Query_time: %{NUMBER:query_time:float} Lock_time: %{NUMBER:lock_time:float} Rows_sent: %{NUMBER:rows_sent:float} Rows_examined: %{NUMBER:rows_examined:float}\n%{GREEDYDATA:sql_text}” }
}dissect { mapping => { "user_host" => "%{user}@%{host}" } } mutate { convert => { "query_time" => "float" "lock_time" => "float" "rows_sent" => "integer" "rows_examined" => "integer" } } }
}
output {
elasticsearch {
hosts => “elasticsearch:9200”
index => “mysql-slow-query-%{+YYYY.MM.dd}”
}
}
“`该配置文件表示从MySQL的slow.log文件中收集慢查询日志,并对日志数据进行解析和处理,并将处理后的数据输出到Elasticsearch中,并指定Index名称为mysql-slow-query-当前时间。