Alfresco logging with Logstash and Kibana. Part 1: The basics

This is the first post in a series about how to integrate Alfresco with Elasticsearch using Logstash and Kibana. The overall purpose is to get a better view of the events happening in Alfresco. The purpose of this post is to show the basic set up of the needed components.

As any system Alfresco could produce enormous amounts of log data. It is also usually spread out across several application servers (for example one for the repository, one for Share and one for Solr). In a clustered environment there could also be multiple instances of a particular type. Logs are text files with some common patterns. For example, the standard Alfresco logs contains a time stamp, the log level, name of logger and of course the message. It is not unusual that the combined log files in a production system contains tens of thousands of lines and it could be very hard to get an overview and map lines between different log files to see the full context. To the rescue comes Logstash and Kibana! Basically Logstash collect data from one or several sources, filters it and sends it to an output. In this case the output will be Elasticsearch and Kibana acts as the web user interface towards the (log) data stored in Elasticsearch. There are several excellent tutorials on how to set up these components. Very briefly this is how I did it:

Preparations

Download Logstash:

curl -O https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
tar zxvf logstash-1.4.2.tar.gz

Download Elasticsearch

curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gztar zxvf elasticsearch-1.1.1.tar.gz

Download and install Kibana

curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz
tar zxvf kibana-3.1.0.tar.gz
cp -r kibana-3.1.10 /var/www/kibana

You also need to point Kibana to the Elasticsearch host. Locate config.js inside the kibana directory and change

elasticsearch: "http://"+window.location.hostname+":9200",

to

elasticsearch: "http://yourelasticsearchserver:9200",

Configure Logstash for Alfresco

Now you need to do some basic config in Logstash. The configuration file consist of inputs, filters and outputs. We will start with a very simple configuration that just reads a file input (alfresco.log) and forwards it to Elasticsearch. Create the server.conf in logstash-1.4.2/ with the following content:

input {
 file {
  path => "/opt/alfresco/tomcat-repo/logs/alfresco.log"
  type => "alfresco" # a type to identify those logs
  start_position => "end"
 }
}
filter {
}
output {
 stdout { }
 elasticsearch {
  cluster => "elasticsearch"
 }
}

It just tells Logstash to forward what is written to your alfresco.log (assuming it is located in /opt/alfresco) to Elasticsearch without any filtering

Fire it up!

Now you are ready to start up the services. Start with Elasticsearch:

./elasticsearch-1.1.1/bin/elasticsearch

Then Kibana, in my case I use the nginx web server so I simply do

nginx restart

Finally you start Logstash and point out the configuration file defined above:

logstash-1.4.2/bin/logstash --verbose -f ./logstash-1.4.2/server.conf

After you have started Logstash you should see some logging in Elasticsearch indicating that Logstash has been connected. Now start Alfresco and you should see all the alfresco logging also appear in the Logstash console. Open the Logstash dashboard at http://localhost/index.html#/dashboard/file/logstash.json It will look something like this:

Kibana screenshot showing the Alfresco repository startup logging

Kibana screenshot showing the Alfresco repository startup logging.

Basic Logstash configuration for Alfresco

So far we have made a generic setup of Logstash and Kibana. Now it’s time for some Alfresco specifics.

1. Multiline filter (really not Alfresco specific but for Java logs in general)

You might have noticed that each row in alfresco.log was interpreted as a single item in Kibana. This is not suitable as Java logs often contains line breaks (for example stack traces). Add a filter in your Logstash configuration that merges each row of a stack trace into a single item:

filter {
 multiline {
   pattern => "^\s"
   what => "previous"
 } 
}

2. Configure types for Alfresco, Share and Solr

Another advantage of using Logstash is that you could combine several logs into a single Elasticsearch index. With Alfresco you would probably like to do this for at least the repository, Share and Solr but it is of course also possible to add system logs, access logs or even Alfresco audit logs to Logstash to analyze them at once. In the example you simply add another log using the input directive. Below is an example for all three Alfresco logs:

input {
 file {
  path => "/opt/alfresco/tomcat-repo/logs/alfresco.log"
  type => "alfresco"
  start_position => "end"
 }

 file {
  path => "/opt/alfresco/tomcat-share/logs/share.log"
  type => "share"
  start_position => "end"
 }

 file {
  path => "/opt/alfresco/tomcat-solr/logs/solr.log"
  type => "solr"
  start_position => "end"
 }
}

With this new config the Kibana dashboard will look like (I also enabled full debug logging in Alfresco to get some more data):

Kibana dashboard with repo, share and solr logging

Note the three different types. Here alfresco produces the majority output as DEBUG log level is enabled.

I added a query each for the types I defined in my Logstash config. This is just a very simple example on how to filter and search in the logs.

What is next?

There are numerous ways to configure Logstash for your needs. In the following posts I will explain

  • How to use the log4j socket appender instead of files to transmit messages to Logstash. Is is normally not the best idea to run it on the Alfresco repository server.
  • How to use a json log4j layout to auto parse log messages in Logstash.
  • How to view Alfresco audit data in Kibana using Logstash and Elasticsearch.
This entry was posted in Alfresco, Logging and tagged , , , , . Bookmark the permalink.

171 Responses to Alfresco logging with Logstash and Kibana. Part 1: The basics

  1. That’s amazing.
    I’ll try it

    You said “Is is normally not the best idea to run it on the Alfresco repository server.”
    Does it impact a lot on the server performance?

    Thank you

  2. carn says:

    It is indeed very easy to set up and get started.

    What I mean with “normally not the best idea to run it on the Alfresco repository server” was that when you have limited resources on the server and it also adds complexity to your production environment I would recommend to scale out if possible. And with Logstash it is really simple (I will show how in a coming post).

    The actual load it put on the server depends on the amount of logging and formatting done. But in any circumstances one of the great benefits of this approach is that you will aggregate all logs (repo, share, solr, db etc) into one with a user friendly UI and normally these logs resides on different servers anyway – so maybe performance is not the no #1 reason for separating log analysis from the Alfresco servers.

  3. me suba says:

    gCKPqr There is certainly a great deal to learn about this topic. I like all the points you have made.

  4. Just got a Blogger account, it works good, but how do I find different users blogs I like with search. I remember there is a way, but I am not seeing it now. Thanks for your help..

  5. Sources Wow! Thank you! I continuously needed to write on my blog something like that. Can I take a portion of your post to my site?

  6. Thanks so much for the blog. Keep writing.

  7. 다자바 says:

    Thank you ever so for you blog article. Great.

  8. I truly appreciate this post.Much thanks again. Keep writing.

  9. Im no pro, but I suppose you just crafted an excellent point. You undoubtedly know what youre speaking about, and I can really get behind that. Thanks for staying so upfront and so truthful.

  10. Baseball (baseball) is a Chinese word written in Japan, and the name “baseball” used in Korea is also used as it is based on the Chinese character of the name made in Japan.야구스포츠중계

  11. We will provide you with a good match analysis and sports issue & news to bet on Toto.MLB토토사이트

  12. An example is the preservation of ancient Greek sculptures in the museum and the making of replicas to create alternatives for display. Therefore, replicas are not necessarily replicas made by the original author.레플리카명품

  13. The KBO League is a professional baseball league in Korea. On December 11, 1981, six teams including OB Bears, Haitai Tigers, Samsung Lions, Sammi Superstars, Lotte Giants, and MBC Blue Dragon participated in the founding general meeting of Korean professional baseball to announce the launch of professional baseball.KBO스포츠중계

  14. Major thankies for the article.Really looking forward to read more. Want more.

  15. Thanks for sharing, this is a fantastic article.Really looking forward to read more. Will read on

  16. 스포츠중계 says:

    Sports relay site Height TV. All sports around the world nba nb mlb Relay Overseas

    football Relay Overseas sports Relay See all sports for free스포츠중계

  17. Dalaman havalimanında araç kiralama konusunda faaliyet göstermekte olan Dalaman Daily Rent A Car, araç kiralama sektöründeki tecrübesi ve son model araçlarıyla Dalaman’da önde gelen rent a car firması olma yolunda hızla ilerlemektedir. 7 gün 24 saat kesintisiz oto kiralama ihtiyacınızı karşılayan daily rent a car firmamız lüks ve ekonomik otomobil çeşitleriyle araç kirlama konusunda her bütçeye hitap etmektedir. Geniş araç filomuz ile dalamanda rent a car sektöründe yerli ve yabancı müşterilerimize hizmet vermekteyiz.

  18. NeneCop, which is famous for EQ verification, is safe and thoroughly verified to help you use it more easily and safely.
    토토사이트추천

  19. Sports are activities to compete according to certain rules, including physical activity, as well as various sports and games that borrow the power of tools or animals,해외스포츠중계

  20. essay says:

    Looking for some people to swim with. (don’t have to be professional swimmer or anything.

  21. PowerTV, which provides free sports videos, is a secure sports TV that can be viewed free of charge without login
    해외축구중계

  22. Sports are activities to compete according to certain rules, including physical activity, as well as various sports and games that borrow the power of tools or animals,메이저리그중계

  23. Hey There. I discovered your blog the usage of msn. That is a very smartly written article. I’ll make sure to bookmark it and come back to learn more of your helpful information. Thanks for the post. I will certainly return.

  24. child porn says:

    Weight loss isnt always easy and it helps to learn what weight loss is all about.CLICK HERE

  25. srgei says:

    Sports are activities to compete according to certain rules, including physical activity, as well as various sports and games that borrow the power of tools or animals,메이저리그중계

  26. http://agree.com says:

    including physical activity, as well as various sports and games that borrow the power of tools or animals, Sports are activities to compete according to certain rules, 스포츠중계

  27. http://adfdegree.com says:

    including physical activity, as well as various sports and games that animals, Sports are activities to compete according to certain rules, 스포츠중계

  28. http://fghttagree.com says:

    including physical activity, as well as various sports and games that animals, Sports are activities to compete according to certain rules, 스포츠중계

  29. http://ffgeagree.com says:

    including physical activity, as well as various sports and games that animals, Sports are activities to compete according to certain rules, 국내스포츠중계

  30. plvan says:

    Thank you for sharing such useful post. Very interesting Post! I regularly follow this kind of Blog. top colleges in canada

  31. EPL중계 says:

    The return of fullback Roosevelt Nix to the lineup surely helped pave holes for Conner through the Miami front seven, but Pittsburgh might not have the running back available to run past those blocks by next Sunday’s game against the Indianapolis Colts.

  32. Projectsatbangalore offer Biomedical Projects,Medical Electronics Projects,Biomedical Instrumentation Projects on all domains.The best institute for final year engineering projects.

  33. To find used items like sensors,motors,machines,etc in bangalore visit: http://second-hand.in/

  34. Projectsinbangalore offer all type of final year engineering projects under all domains.

  35. Maxine Tec provides challenging automated solutions for all type of industries in Bangalore.

  36. This site offers latest innovative IEEE Vlsi Projects,FPGA Projects,Xilinx Projects and Cadence Projects for B.Tech and M.Tech Students.

  37. Cinders and gross matter flow away below as lava. The iron, seeking itself, falls like rain into the hearth at the bottom and runs out on the sand, forming there a molten lake. Around the edges of this lake, taking off from it, is a series of moulded depressions. The lake drains into these depressions. They suck it dry. Ironworkers call the lake the sow. The forms that appear in the depressions, having devoured the sow completely, are called the pigs. The product is pig iron,—a lump of rough metal the size of a man’s thigh.

  38. interested, once in Philadelphia where he was transacting business and she was shopping with her maid, and once in a memorable way on a path through the woods to Throne Rock, a natural seat on the mountain summit from which the view of the valley was exciting.

  39. hdvideos says:

    The first thing I would say is that you need to really look in to the viability of using e-mails to help admins spot problems with servers. Sending an e-mail can be a heavy operation and as such, particularly with many repeated errors, can make an existing problem worse. And what about the cases where the ability to send e-mails goes down or a problem so severe happens that it simply cannot send e-mails?

  40. Hello everyone, it’s my first go to see at this web page, and piece of writing is in fact fruitful in support
    of me, keep up posting such posts.
    ✽ 7mscore비즈 ✽
    The games you can enjoy include Baccarat, Super Six Baccarat, Roulette, Blackjack, Dragon Tiger, and Sic Bo.

  41. Remarkable! Its genuinely awesome post, I have
    got much clear idea regarding from this
    paragraph.❖ 먹튀검증디비 ❖

  42. Remarkable! Its genuinely awesome post, I have
    got much clear idea regarding from this

  43. jazz says:

    I enjoy the work you present here. Thanks. please! visit our site.
    https://hky7.com 토토사이트

  44. Newly renewed power TV! Right click on the TV to watch sports for free해외스포츠중계

  45. toplu sex says:

    topunu patlatırım topsuz kalırsın.

  46. Name says:

    comment text
    link

  47. marc linx says:

    yes these basics are really basics. i like this post. it contains all the new and old methods

  48. Ataşehir evden eve nakliyat

  49. Evden eve nakliyat şirketleri

  50. Ümraniye Nakliyat Firmamız kurulduğu ilk yıllarda nakliyat sektöründeki samimiyetsizliği, yanlış hizmet vermeyi ve müşteri memnuniyeti sıkıntılarını görerek aynı hataları yapmadan yol almayı hedefleyerek kuruldu. Nakliyat alanındaki sıkıntıları görerek bu hataya düşmeden hizmet vermeye başlamamız bizi bu sektörde 2-0 önde başlamamıza sağladı. Bu da haliyle bir çok firmayı geçmemizi ve sektörümüzde lider bir firma olmamızı sağladı.

  51. There as definately a great deal to learn about this issue. I really like all the points you ave made.

  52. There is certainly a lot to find out about this subject. I like all of the points you ave made.

  53. torrent day says:

    Im grateful for the article post.Thanks Again. Want more.

  54. marketing says:

    I think this is a real great article post.Really looking forward to read more. Much obliged.

  55. thongtin says:

    pretty useful material, overall I believe this is really worth a bookmark, thanks

  56. Türkiyenin en büyük sosyal medya satış platformu hesapsat.net güvenli ve hızlı alım garantisi ile Türkiye’de alanının en iyisi olmayı başardı. Satılık instagram hesabı arayanlar ve sosyal medya hesaplarını satın almak isteyenlerin %100 müşteri memnuniyeti ile karşılaştığı sitenin türkiyenin en büyük sosyal medya satış platformu olduğu biliniyor.

  57. Major thankies for the article post. Much obliged.

  58. yöntem güzel ama uygulama düzenli çalışmıyor

  59. I suggest you to visit a site on which there are many articles on a theme interesting you.

  60. thanks for this share dude

  61. 부커취 says:

    pretty helpful material, overall I imagine this is well worth a bookmark, thanks

  62. It as hard to find educated people on this topic, but you sound like you know what you are talking about! Thanks

  63. Thanks for the great post, I adore the blog.

  64. Pinganillo says:

    Thank you ever so for you post.Thanks Again. Cool.

  65. That is a really very good examine for me, Ought to admit that you are one particular of the best bloggers I ever saw.Thanks for posting this informative report.

  66. nX1cyO Thanks so much for the blog post.Really looking forward to read more. Will read on

  67. kpop says:

    Looking forward to reading more. Great blog post.Much thanks again. Keep writing.

  68. You are my function models. Many thanks for your post

  69. There is noticeably a bundle to know about this. I think you made certain good points in features also.

  70. sello colop says:

    Muchos Gracias for your post.Much thanks again. Great.

  71. kamagra says:

    when i was when i was still a kid, i was already very interested in business and business investments that is why i took a business course**

  72. It as best to participate in a contest for the most effective blogs on the web. I all recommend this site!

  73. plumber seo says:

    It as very straightforward to find out any topic on net as compared to textbooks, as I found this article at this site.

  74. Some genuinely interesting info , well written and generally user genial.

  75. Is there any way you can remove people from that service?

  76. Valuable info. Fortunate me I found your site accidentally,

  77. tara matka says:

    Wow, superb weblog structure! How long have you been blogging for? you make blogging glance easy. The total look of your web site is excellent, neatly as the content material!

  78. matka 420 says:

    that would be the end of this report. Here you

  79. İSTANBUL merkez olmak üzere 1972 yılından bu yana aralıksız olarak taşımacılık sektöründeki öncülüğümüzü sürdürmekteyiz. Enginoğlu nakliyat, sektörde geride bıraktığı 40 yılda birçok hizmeti başarıyla tamamlamıştır. Enginoğlu nakliye müşteri odaklı hizmet politikasıyla faaliyetlerini sürdürmektedir.

    Kaliteli hizmet vermek amacı ile kurmuş olduğumuz Enginoğlu Evden Eve Nakliyat şirket 1972 yılından bu yana farklı boyutlardaki ara seçenekleri ile siz değerli müşterilerimize hizmet vermektedir.

    Taşıma işlemi sırasında evin oda sayısı bulunduğu kata göre personel getirilir. Her taşıma işlemi sırasında getirilen personelin içerisinde marangoz ustası da bulunmaktadır.

  80. very couple of internet websites that take place to be in depth below, from our point of view are undoubtedly properly really worth checking out

  81. Thanks for the post.Much thanks again. Great.

  82. maha168 says:

    Wow, great article.Really looking forward to read more. Keep writing.

  83. Very good info. Lucky me I ran across your website by chance (stumbleupon). I have book marked it for later!

  84. thanks says:

    Thank you very much.

  85. Very good article.Thanks Again. Fantastic.

  86. 먹튀신고 says:

    I needed several examples to write an article on this subject, and your article was of great help to me.먹튀신고

  87. jungeun says:

    Good day! I’ve been searching a lot of sites here in the internet. I’m looking for the best website to have fun that I eventually want to make revenue with or the best way to get rid of my boredom. Do you have any suggestions?

  88. Gena says:

    Remarkable! Its really amazing paragraph, I
    have got much clear idea regarding from this article.

  89. torrent oyun says:

    Oyun severler, bu oyunları bilgisayarlarına yüklemek için alternatif yöntem deniyor, torrentoyunum.com de bu yöntemlerin arasında. Bu yöntemle birlikte oyun severler oyunları kolay bir şekilde indirip en kısa süre içerisinde oynamaya başlıyor. Günümüzde Oyun severler bu şekilde piyasadaki bütün oyunları bu yöntem ile indirebiliyorlar.

  90. bacarasite says:

    Thank you for sharing your truth! I have so much more that I would like to say but I don’t think its necessary. Just visit my site: 카지노사이트

  91. I finally found what I was looking for! I’m so happy. 토토커뮤니티 Your article is what I’ve been looking for for a long time. I’m happy to find you like this. Could you visit my website if you have time? I’m sure you’ll find a post of interest that you’ll find interesting.

  92. This is one very interesting post. I like the way you write and I will bookmark your blog to my favorites. 온라인홀덤

  93. In the meantime, I wondered why I couldn’t think of the answer to this simple problem like this. Your article is an article that gives the answer to all the content I’ve been contemplating. 온라인홀덤

  94. Are you bored when you’re home alone? You keep thinking what to do. Visit the site and watch your favorite video alone

  95. Порно says:

    If your mother is not at home, your father is at work, your brother is at school, then it’s time for porn

  96. Are you bored when you’re home alone? You keep thinking what to do. Visit the site and watch your favorite video alone

  97. Your blog is really nice. Its sound really good바카라사이트

  98. Great blog article. Really looking forward 토토to read more.

  99. Thank you for sharing this information. I read your blog and I can’t stop my self to read your full blog. Again Thanks and Best of luck to바카라사이트 your next Blog in future.

  100. Güzel uygulama ellerinize sağlık

  101. Thank you so much for sharing valuable Info! I was looking something just like this for my own project! I am quite thankful I came across to your site.

  102. A lot of useful information here. I am Sending it to several palsies and additionally sharing in yummy. And of course, thanks to your own effort!

  103. 100% 검증 된 온라인 슬롯사이트를 추천합니다. 인기가 많은 다양한 온라인 슬롯 머신을 만나보실 수 있습니다. 환수율이 가장 높은 메이저 업체에서 즐거운 슬롯게임 슬롯머신사이트 .

  104. I enjoy the efforts you have put in this, thank you for all the great posts.
    My Blog Post:

  105. This is the perfect website for everyone who hopes to find out about this topic. You know so much its almost tough to argue with you
    My Blog Post:

  106. Kreatif 360 says:

    Most creative director positions require a bachelor’s degree in creative design, advertising, marketing, journalism, communications, or a related field

  107. Everyone an extremely breathtaking chance to read from this blog. It is always so lovely and jam-packed with a great time. 릴게임

  108. Great Post for Beginner to understand. I finally found great post here. Thanks for information. Keep sharing more articles. 바카라사이트

  109. catfight says:

    Hi there, I discovered your web site via a search engine at the same time as searching for a similar topic. I really appreciate this post. I have been looking everywhere for this! Your site hit the nail upon the top and outlined the whole thing without having side effect , other people could take a benefit and will probably come again to get more. Thanks!

  110. hidibf says:

    Здравствуйте, я обнаружил ваш сайт через поисковую систему в то же время, когда искал похожую тему. Я очень ценю этот пост. Я искал это повсюду! Ваш сайт попал в самую точку и изложил все без побочных эффектов, другие люди могли бы извлечь пользу и, вероятно, придут снова, чтобы получить больше. Спасибо!

  111. glour says:

    नमस्ते, मैंने उसी समय एक खोज इंजन के माध्यम से आपकी वेब साइट की खोज की थी जब एक समान विषय की खोज की गई थी। मेरे द्वारा इस पोस्ट में वास्तव में प्रसंशा की जाती है। मेरे द्वारा इसे हर जगह ढूंढा जा रहा था! आपकी साइट ने शीर्ष पर कील ठोक दी और साइड इफेक्ट के बिना पूरी बात को रेखांकित किया, अन्य लोग लाभ उठा सकते थे और शायद अधिक प्राप्त करने के लिए फिर से आएंगे। धन्यवाद!

  112. brirlle says:

    Bonjour, j’ai découvert votre site web via un moteur de recherche en même temps que je cherchais un sujet similaire. J’apprécie vraiment cet article. Je l’ai cherché partout ! Votre site a frappé le clou sur le dessus et a souligné l’ensemble de la chose sans avoir d’effet secondaire, d’autres personnes pourraient prendre un avantage et sera probablement revenir pour obtenir plus. Je vous remercie !

  113. I want foregathering useful information, this post has got me even more info!

  114. Good day! I just want to give you a big thumbs.

  115. I’m writing on this topic these days, 메이저놀이터추천, but I have stopped writing because there is no reference material. Then I accidentally found your article. I can refer to a variety of materials, so I think the work I was preparing will work! Thank you for your efforts.

  116. Cemal Arslan says:

    ümraniye nakliyat

  117. Thanks You Good Blog

  118. yert200 says:

    which essentially says the more witnesses there are to a crime, the less likely any single one of them is to call the police. The Genovese case outraged a city, moving from real-life crime to allegory of the moral decay wrought by urban living. 카지노사이트

  119. shine900 says:

    a young woman was sexually assaulted on the New York City subway; no one intervened, and one bystander took cellphone footage of the attack, which was later uploaded — he says not by him — to porn and gossip sites. 카지노사이트

  120. gain777 says:

    None of this is to speculate about the victim in this case. It is simply to say many women find their assaults ignored by bystanders and law enforcement alike because of who they are. That information is important to know if we want to fully understand what happened here. 카지노사이트

  121. kkr789 says:

    Here, technology may have played an even more sinister role: Allowing people to separate themselves from a violent crime they were witnessing and could have stopped, turning it from an attack on a human being to a story on a screen. And at the very least, this is one more on a long list of stories of women being raped and otherwise sexually assaulted, not safe in our own homes or on the streets, on the subway or in a taxi cab, or even with 카지노사이트

  122. aace777 says:

    After filing paperwork to change his name, the rapper, born Kanye Omari West, finally got what he asked for, and will be legally known as “Ye.” 카지노사이트

  123. qqueen700 says:

    The musician hinted at the change as far back as 2018, when he released his studio album “Ye,” and then several months later 카지노사이트

  124. hotgame8 says:

    Photos on Israeli news websites showed him in mid-air, clutching the red-and-white basket. Police said he fell onto a road in the north of the country from a height of about 100 meters (330 feet).
    인터넷카지노

  125. Bedava internet sayesinde Turkcell, Vodafone ve Türk Telekom gibi hatların bedava internet kampanyalarından faydalanın. Ücretsiz internet kullanma keyfine varın.
    bedavainternetiniz.com

  126. casino says:

    I’m so happy to finally find a post with what I want. casino You have inspired me a lot. If you are satisfied, please visit my website and leave your feedback.

  127. Thank you ever so for you blog article. Great.

  128. 메가슬롯 says:

    I think your writing will help me, can you come to me once and help? My site is “메가슬롯

  129. Elektrikçi says:

    Elektrikçi · Ataşehir, İstanbul … -Her Türlü Ev ve İş yerlerinin Elektrik Tamir, Bakım Onarım işlemleri -Yeni Elektrik tesisat çekimi -Kamera sistemleri montajelektrikçi

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>